本文整理汇总了C#中Env.DefineScriptProcedure方法的典型用法代码示例。如果您正苦于以下问题:C# Env.DefineScriptProcedure方法的具体用法?C# Env.DefineScriptProcedure怎么用?C# Env.DefineScriptProcedure使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Env
的用法示例。
在下文中一共展示了Env.DefineScriptProcedure方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SetupGlobalEnv
static Env SetupGlobalEnv()
{
Env G = new Env(null, new List<string>(), new List<object>());
G.Define("true", true);
G.Define("false", false);
G.Define("else", true);
G.DefineScriptProcedure("not", (args, k) => k(!(bool)args[0]));
G.DefineScriptProcedure("identity", (args, k) => k(args[0]));
G.DefineScriptProcedure("sqr", (args, k) => {
if (args[0] is BigInteger) {
var a = (BigInteger)args[0]; return k(a * a);
} else {
var a = (decimal)args[0]; return k(a * a);
}
});
G.DefineScriptProcedure("+", (args, k) => {
if (args[0] is decimal || args[1] is decimal) return k(castToDecimal(args[0]) + castToDecimal(args[1]));
return k((BigInteger)args[0] + (BigInteger)args[1]);
});
G.DefineScriptProcedure("-", (args, k) => {
if (args[0] is decimal || args[1] is decimal) return k(castToDecimal(args[0]) - castToDecimal(args[1]));
return k((BigInteger)args[0] - (BigInteger)args[1]);
});
G.DefineScriptProcedure("*", (args, k) => {
if (args[0] is decimal || args[1] is decimal) return k(castToDecimal(args[0]) * castToDecimal(args[1]));
return k((BigInteger)args[0] * (BigInteger)args[1]);
});
G.DefineScriptProcedure("/", (args, k) => {
if (args[0] is decimal || args[1] is decimal) return k(castToDecimal(args[0]) / castToDecimal(args[1]));
return k((BigInteger)args[0] / (BigInteger)args[1]);
});
G.DefineScriptProcedure("quotient", (args, k) => {
if (args[0] is decimal || args[1] is decimal) return k((BigInteger)(castToDecimal(args[0]) / castToDecimal(args[1])));
return k((BigInteger)args[0] / (BigInteger)args[1]);
});
G.DefineScriptProcedure("remainder", (args, k) => {
if (args[0] is decimal || args[1] is decimal) return k(castToDecimal(args[0]) % castToDecimal(args[1]));
return k((BigInteger)args[0] % (BigInteger)args[1]);
});
G.DefineScriptProcedure("=", (args, k) => k(args[0].Equals(args[1])));
G.DefineScriptProcedure("<", (args, k) => k((args[0] as IComparable).CompareTo(args[1]) < 0));
G.DefineScriptProcedure("<=", (args, k) => k((args[0] as IComparable).CompareTo(args[1]) <= 0));
G.DefineScriptProcedure(">", (args, k) => k((args[0] as IComparable).CompareTo(args[1]) > 0));
G.DefineScriptProcedure(">=", (args, k) => k((args[0] as IComparable).CompareTo(args[1]) >= 0));
G.DefineScriptProcedure("eq?", (args, k) => k(object.ReferenceEquals(args[0], args[1])));
G.DefineScriptProcedure("cons", (args, k) => k(new Pair() {
Car = args[0], Cdr = args[1]
}));
G.DefineScriptProcedure("car", (args, k) => k(((Pair)args[0]).Car));
G.DefineScriptProcedure("cdr", (args, k) => k(((Pair)args[0]).Cdr));
G.DefineScriptProcedure("drop", (args, k) => {
Pair l = (Pair)args[0]; int n = (int)(BigInteger)args[1];
for (; n > 0; --n) {
l = (Pair)l.Cdr;
}
return k(l);
});
G.DefineScriptProcedure("length", (args, k) => {
int n = 0;
for (Pair l = (Pair)args[0]; l != null; ++n, l = (Pair)l.Cdr) ;
return k(n);
});
G.DefineScriptProcedure("append", (args, k) => {
var l = PairToList((Pair)args[0]);
l.InsertRange(l.Count, PairToList((Pair)args[1]));
return k(ListToPair(l));
});
G.Define("empty", null);
G.DefineScriptProcedure("empty?", (args, k) => k(args[0] == null));
G.DefineScriptProcedure("pretty-print", (args, k) => {
PrintPairExp(args[0]);
return k(null);
});
G.DefineScriptProcedure("display", (args, k) => {
PrintListExp(PairExpToListExp(args[0]));
return k(null);
});
G.DefineScriptProcedure("current-inexact-milliseconds", (args, k) => {
long now;
QueryPerformanceCounter(out now);
return k((decimal)(now - sTimerStart) * 1000 / sTimerFreq);
});
G.DefineScriptProcedure("exit", (args, k) => {
Environment.Exit(0);
return k(null);
});
G.DefineScriptProcedure("random", (args, k) => k((BigInteger)sRandom.Next((int)(BigInteger)args[0])));
G.DefineScriptProcedure("eval", (args, k) => k(ForceEval(G, PairExpToListExp(args[0]))));
G.DefineScriptProcedure("call/cc", (args, k) => {
return ((Procedure)args[0])(new List<object>() {
(Procedure)((args2, k2)=> new KeyValuePair<object, Continue>(args2[0], k)),
}, k);
});
return G;
//.........这里部分代码省略.........