Example #1
0
File: port.go Project: catb0t/gelo
func PortClosedp(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	if ac != 1 {
		gelo.ArgumentError(vm, "closed?", "port", args)
	}
	p := vm.API.PortOrElse(args.Value)
	return gelo.ToBool(p.Closed())
}
Example #2
0
File: dict.go Project: catb0t/gelo
func Dict_setp(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	if ac != 2 {
		gelo.ArgumentError(vm, "dict.setp?", "dictionary key", args)
	}
	d := vm.API.DictOrElse(args.Value.(*gelo.Dict))
	k := args.Next.Value
	return gelo.ToBool(d.Has(k))
}
Example #3
0
File: math.go Project: catb0t/gelo
func NaNp(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	if ac == 0 {
		return gelo.False
	}
	return args.MapOrApply(func(w gelo.Word) gelo.Word {
		return gelo.ToBool(math.IsNaN(vm.API.NumberOrElse(w).Real()))
	})
}
Example #4
0
File: math.go Project: catb0t/gelo
func Negativep(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	if ac == 0 {
		return gelo.False
	}
	return args.MapOrApply(func(w gelo.Word) gelo.Word {
		return gelo.ToBool(vm.API.NumberOrElse(w).Real() < 0)
	})
}
Example #5
0
func Re_matchp(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	if ac != 2 {
		gelo.ArgumentError(vm, "match?", "regexp string", args)
	}
	r := ReOrElse(vm, args.Value)
	s := args.Next.Value.Ser().Bytes()
	return gelo.ToBool(r.Match(s))
}
Example #6
0
File: logic.go Project: catb0t/gelo
// Unlike And and Or, Not only works on bools
func Not(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	if ac == 0 {
		return gelo.False
	}
	return args.MapOrApply(func(w gelo.Word) gelo.Word {
		return gelo.ToBool(!vm.API.BoolOrElse(w).True())
	})
}
Example #7
0
File: eval.go Project: catb0t/gelo
func Invokablep(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	if ac == 0 {
		return gelo.False
	}
	return args.MapOrApply(func(w gelo.Word) gelo.Word {
		_, ok := vm.API.IsInvokable(w)
		return gelo.ToBool(ok)
	})
}
Example #8
0
File: names.go Project: catb0t/gelo
func Setp(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	if ac == 0 {
		gelo.ArgumentError(vm, "set?", "name+", args)
	}
	return args.MapOrApply(func(w gelo.Word) gelo.Word {
		_, ok := vm.Ns.Lookup(w)
		return gelo.ToBool(ok)
	})
}
Example #9
0
File: math.go Project: catb0t/gelo
func _infp_gen(s int) gelo.Alien {
	return func(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
		if ac == 0 {
			return gelo.False
		}
		return args.MapOrApply(func(w gelo.Word) gelo.Word {
			return gelo.ToBool(math.IsInf(vm.API.NumberOrElse(w).Real(), s))
		})
	}
}
Example #10
0
File: math.go Project: catb0t/gelo
func Integerp(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	if ac == 0 {
		return gelo.False
	}
	return args.MapOrApply(func(w gelo.Word) gelo.Word {
		n := vm.API.NumberOrElse(w)
		_, ok := n.Int()
		return gelo.ToBool(ok)
	})
}
Example #11
0
File: types.go Project: catb0t/gelo
func _make_tpred(type_sig string) gelo.Alien {
	sig := []byte(type_sig)
	return func(_ *gelo.VM, args *gelo.List, ac uint) gelo.Word {
		if ac == 0 {
			return gelo.False
		}
		return args.MapOrApply(func(w gelo.Word) gelo.Word {
			return gelo.ToBool(bytes.Equal(sig, w.Type().Bytes()))
		})
	}
}
Example #12
0
File: logic.go Project: catb0t/gelo
func Not_equals(vm *gelo.VM, args *gelo.List, ac uint) gelo.Word {
	switch ac {
	case 0, 1:
		return gelo.False
	case 2:
		return gelo.ToBool(!args.Value.Equals(args.Next.Value))
	}
	head := args.Value
	for args = args.Next; args != nil; args = args.Next {
		if args.Value.Equals(head) {
			return gelo.False
		}
	}
	return gelo.True
}