java中'predicate.arg(1)'和'predicate.arity'是什么意思

马克·斯普林格

我有一些 java 代码我正试图翻译成 vb.net。它使用“谓词”,这是一个我直到现在都不知道存在的功能,但它也存在于 vb.net 中。

所以我阅读了关于它的文档,但没有一个解释我拥有的 Java 代码,特别是,如果你有一个变量 'p' 声明为谓词,p.arity 有什么作用,p.arg(0) 和p.arg(1) 返回?

我的一般印象是谓词接受一组对象并返回满足特定条件的子集(例如,给定所有篮球运动员的集合,仅返回那些身高超过 6 英尺的球员)。但以下代码似乎与此无关:

    // st is assumed to be a list of ECHO predicates
    //
  private void parseInput(StreamTokenizer st) throws IOException
  {

while (st.nextToken() != StreamTokenizer.TT_EOF) {
  st.pushBack();
  Predicate p = new Predicate(st);
  parsePredicate(p);
} // while
  }


  // PRE: p is non-null
  // POST: performs the additions to the ECHO graph required by the
  //       ECHO predicate; if p is not a legal ECHO predicate, an 
  //       IOException is thrown
  //
  private void parsePredicate(Predicate p) throws IOException
 {
Assert.notNull(p);
String name = p.name();

if (name.equalsIgnoreCase(explainPred)) {
  parseExplain(p);
} else if (name.equalsIgnoreCase(dataPred)) {
  parseData(p);
} else if (name.equalsIgnoreCase(contradictPred)) {
  parseContradict(p);
} else if (name.equalsIgnoreCase(analogyPred)) {
  parseAnalogy(p);
} else if (name.equalsIgnoreCase(propositionPred)) {
  parseProposition(p);
} else {
  throw new IOException("ECHO: "+name+" is not a legal predicate name. "+
                                                "Must be one of "+explainPred+", "+dataPred+", "+
                                                contradictPred+", or "+analogyPred);
} // if
  }

  //
  // PRE: p's name is explainPred
  // POST: adds the given explanation predicate to ECHO, adding all necessary
  //       links; throws an exception if p is not a legal explains predicate
  //
  private void parseExplain(Predicate p) throws IOException
  {
//msg("in parseExplain...");
int arity = p.arity();
float weight;
List propList;
String explainee;

if (arity == 2) {
  //msg("arity == 2");
  propList = (List)p.arg(0);
  explainee = (String)p.arg(1);
  weight = (float)explainWeight(propList.length());
} else if (arity == 3) {
  //msg("arity == 3");
  propList = (List)p.arg(0);
  explainee = (String)p.arg(1);
  float strength = Float.valueOf((String)p.arg(2)).floatValue();
  weight = (float)(strength*explainWeight(propList.length()));
} else {
  throw new IOException("ECHO: an explains predicate must have 2 or 3 "+
                                                "arguments: "+p);
    } // if
kevintjuh93

在这种情况下,我假设如下:

arity 是函数采用的参数数量。您可以看到,在检查 arity 是否等于 2 后,它读取了两个参数(arg(0) 和 arg(1))。所以 arg 只是在给定索引处获取参数/参数的方法。

那么当arity为3时,可以得到三个args;0, 1, 2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SWI-Prolog中meta_predicate的数值参数是什么意思?

为什么LINQ中的LastOrDefault(predicate)比FirstOrDefault(predicate)快

bash脚本中的“ 1 >>”和“ 2 >>”是什么意思?

在SQL / Oracle中,'%'和'.-1,%'以及',%'或'%'是什么意思?

arg在WordPress中是什么意思

$#,$ 1和$ 2是什么意思?

##和%在shell中是什么意思?

Yaml中的<<`和`&`是什么意思?

在C ++中,^(){}和^ {}是什么意思?

[Prolog]中的[]和[_]是什么意思

=〜和/ \在Ruby中是什么意思?

“ >>”和“ <<”在python中是什么意思?

JavaScript中的$和$$是什么意思?

<%和%>在javascript中是什么意思?

在clingo / ASP中1 <0和1 = -1是什么意思?

[:-1]在python中是什么意思?

bash中的$$ 1是什么意思?

#1在verilog中是什么意思?

[:,:: ::-1]在python中是什么意思?

[ -r $1 ] 和 [ ! -r $1 ] 在 Bash 中是什么意思?

enable = 1和priority = 1在ambari.repo中是什么意思?

在Oracle中的SQL查询中,带有HAVING子句的1和2是什么意思?

$$和<generated>在java stacktrace中是什么意思?

@SuppressWarnings(“ deprecation”)和(“ unused”)在Java中是什么意思?

1和2在命令行输入/输出重定向中是什么意思?

Swift闭包中的$ 0和$ 1是什么意思?

批处理文件中%〜df0和%〜df1是什么意思?

time(1)输出中的“ real”,“ user”和“ sys”是什么意思?

bash脚本中的exit 0,exit 1和exit 2是什么意思?