本文整理汇总了C#中OpenSim.Region.ScriptEngine.Shared.YieldProlog.Variable.getValue方法的典型用法代码示例。如果您正苦于以下问题:C# Variable.getValue方法的具体用法?C# Variable.getValue怎么用?C# Variable.getValue使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OpenSim.Region.ScriptEngine.Shared.YieldProlog.Variable
的用法示例。
在下文中一共展示了Variable.getValue方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: isCurrentPredicate
/// <summary>
/// Return true if there is a dynamic or static predicate with name and arity.
/// This returns false for built-in predicates.
/// </summary>
/// <param name="name"></param>
/// <param name="arity"></param>
/// <param name="declaringClass">used to resolve references to the default
/// module Atom.a(""). If a declaringClass is needed to resolve the reference but it is
/// null, return false</param>
/// <returns></returns>
public static bool isCurrentPredicate(Atom name, int arity, Type declaringClass)
{
CompilerState state = new CompilerState();
Variable FunctionName = new Variable();
foreach (bool l1 in functorCallFunctionName(state, name, arity, FunctionName))
{
Atom functionNameAtom = ((Atom)FunctionName.getValue());
if (functionNameAtom == Atom.NIL)
// name is for a dynamic predicate.
return YP.isDynamicCurrentPredicate(name, arity);
string methodName = functionNameAtom._name;
if (methodName.StartsWith("YP."))
// current_predicate/1 should fail for built-ins.
return false;
if (methodName.Contains("."))
// We don't support calling inner classes, etc.
return false;
if (declaringClass == null)
return false;
foreach (MemberInfo member in declaringClass.GetMember(methodName))
{
MethodInfo method = member as MethodInfo;
if (method == null)
continue;
if ((method.Attributes | MethodAttributes.Static) == 0)
// Not a static method.
continue;
if (method.GetParameters().Length == arity)
return true;
}
}
return false;
}
示例2: compileAnonymousClause
// disable warning on l1, don't see how we can
// code this differently
#pragma warning disable 0168, 0219,0164,0162
/// <summary>
/// Use makeFunctionPseudoCode, convertFunctionCSharp and compileAnonymousFunction
/// to return an anonymous YP.IClause for the Head and Body of a rule clause.
/// </summary>
/// <param name="Head">a prolog term such as new Functor2("test1", X, Y).
/// Note that the name of the head is ignored.
/// </param>
/// <param name="Body">a prolog term such as
/// new Functor2(",", new Functor1(Atom.a("test2", Atom.a("")), X),
/// new Functor2("=", Y, X)).
/// This may not be null. (For a head-only clause, set the Body to Atom.a("true").
/// </param>
/// <param name="declaringClass">if not null, the code is compiled as a subclass of this class
/// to resolve references to the default module Atom.a("")</param>
/// <returns>a new YP.IClause object on which you can call match(object[] args) where
/// args length is the arity of the Head</returns>
public static YP.IClause compileAnonymousClause(object Head, object Body, Type declaringClass)
{
object[] args = YP.getFunctorArgs(Head);
// compileAnonymousFunction wants "function".
object Rule = new Functor2(Atom.RULE, Functor.make("function", args), Body);
object RuleList = ListPair.make(new Functor2(Atom.F, Rule, Atom.NIL));
StringWriter functionCode = new StringWriter();
Variable SaveOutputStream = new Variable();
foreach (bool l1 in YP.current_output(SaveOutputStream))
{
try
{
YP.tell(functionCode);
Variable PseudoCode = new Variable();
foreach (bool l2 in makeFunctionPseudoCode(RuleList, PseudoCode))
{
if (YP.termEqual(PseudoCode, Atom.a("getDeclaringClass")))
// Ignore getDeclaringClass since we have access to the one passed in.
continue;
convertFunctionCSharp(PseudoCode);
}
YP.told();
}
finally
{
// Restore after calling tell.
YP.tell(SaveOutputStream.getValue());
}
}
return YPCompiler.compileAnonymousFunction
(functionCode.ToString(), args.Length, declaringClass);
}
示例3: getSimpleIterator
/// <summary>
/// If the functor with name and args can be called directly as determined by
/// functorCallFunctionName, then call it and return its iterator. If the predicate is
/// dynamic and undefined, or if static and the method cannot be found, return
/// the result of YP.unknownPredicate.
/// This returns null if the functor has a special form than needs to be compiled
/// (including ,/2 and ;/2).
/// </summary>
/// <param name="name"></param>
/// <param name="args"></param>
/// <param name="declaringClass">used to resolve references to the default
/// module Atom.a(""). If a declaringClass is needed to resolve the reference but it is
/// null, this throws a PrologException for existence_error</param>
/// <returns></returns>
public static IEnumerable<bool> getSimpleIterator(Atom name, object[] args, Type declaringClass)
{
CompilerState state = new CompilerState();
Variable FunctionName = new Variable();
foreach (bool l1 in functorCallFunctionName(state, name, args.Length, FunctionName))
{
Atom functionNameAtom = ((Atom)FunctionName.getValue());
if (functionNameAtom == Atom.NIL)
// name is for a dynamic predicate.
return YP.matchDynamic(name, args);
string methodName = functionNameAtom._name;
// Set the default for the method to call.
Type methodClass = declaringClass;
bool checkMode = false;
if (methodName.StartsWith("YP."))
{
// Assume we only check mode in calls to standard Prolog predicates in YP.
checkMode = true;
// Use the method in class YP.
methodName = methodName.Substring(3);
methodClass = typeof(YP);
}
if (methodName.Contains("."))
// We don't support calling inner classes, etc.
return null;
if (methodClass == null)
return YP.unknownPredicate
(name, args.Length,
"Cannot find predicate function for: " + name + "/" + args.Length +
" because declaringClass is null. Set declaringClass to the class containing " +
methodName);
try
{
if (checkMode)
{
assertYPPred(state);
object functor = Functor.make(name, args);
if (CompilerState.isDetNoneOut(state, functor))
{
methodClass.InvokeMember
(methodName, BindingFlags.InvokeMethod, null, null, args);
return YP.succeed();
}
if (CompilerState.isSemidetNoneOut(state, functor))
{
if ((bool)methodClass.InvokeMember
(methodName, BindingFlags.InvokeMethod, null, null, args))
return YP.succeed();
else
return YP.fail();
}
}
return (IEnumerable<bool>)methodClass.InvokeMember
(methodName, BindingFlags.InvokeMethod, null, null, args);
}
catch (TargetInvocationException exception)
{
throw exception.InnerException;
}
catch (MissingMethodException)
{
return YP.unknownPredicate
(name, args.Length,
"Cannot find predicate function " + methodName + " for " + name + "/" + args.Length +
" in " + methodClass.FullName);
}
}
return null;
}
示例4: isSemidetNoneOut
public static bool isSemidetNoneOut(object State, object Term)
{
State = YP.getValue(State);
object functorName = YP.getFunctorName(Term);
object[] functorArgs = YP.getFunctorArgs(Term);
Variable pred = new Variable();
foreach (bool l1 in ((CompilerState)State)._pred.match
(new object[] { functorName, functorArgs.Length, pred, Atom.a("semidet") }))
{
if (CompilerState.isNoneOut(YP.getFunctorArgs(pred.getValue())))
{
return true;
}
}
return false;
}