示例#1
0
            public Datum Evaluate(Datum args)
            {
                var methodArgs = unwrap(args.Enumerate());
                var method     = type.GetRuntimeMethods().First(e => e.Name.Equals(methodName));
                var result     = method.Invoke(null, methodArgs);

                return(result == null ? Null.Instance : DatumHelpers.atom(result));
            }
示例#2
0
            public Datum Evaluate(Datum args)
            {
                var methodArgs = unwrap(args.Enumerate());
                var result     = type.InvokeMember(methodName,
                                                   BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static,
                                                   null, null, methodArgs);

                return(result == null ? Null.Instance : DatumHelpers.atom(result));
            }
示例#3
0
 protected override Datum eval(Datum arg1, Datum arg2)
 {
     if ((arg1 as Pair) != null ||
         (arg2 as Pair) != null)
     {
         return(DatumHelpers.atom(ReferenceEquals(arg1, arg2)));
     }
     return(DatumHelpers.atom(arg1.Equals(arg2)));
 }
示例#4
0
        public static Datum Lookup(this Continuation c, string name)
        {
            var env = GetEnvironment(c);

            if (env == null)
            {
                return(null);
            }

            Datum datum;

            if (env.TryLookup(name, out datum))
            {
                return(datum);
            }

            return(DatumHelpers.atom("undefined"));
        }