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()) }
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)) }
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())) }) }
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) }) }
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)) }
// 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()) }) }
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) }) }
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) }) }
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)) }) } }
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) }) }
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())) }) } }
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 }