首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中'predicate.arg(1)‘和'predicate.arity’是什么意思?

在java中'predicate.arg(1)‘和'predicate.arity’是什么意思?
EN

Stack Overflow用户
提问于 2019-04-08 22:01:22
回答 1查看 104关注 0票数 0

我有一些java代码,我正在尝试将它们转换成vb.net。它使用了“谓词”,这是我直到现在才知道的一个特性,但它也存在于vb.net中。

所以我读了相关的文档,但都没有解释我的java代码,特别是,如果你有一个变量'p‘声明为谓词,p.arity会做什么,p.arg(0)和p.arg(1)返回什么?

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

代码语言:javascript
复制
    // 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-08 22:09:34

在这种情况下,我假设:

复杂度是函数接受的参数的数量。您可以看到,在检查arg是否等于2之后,它读取两个参数(arg(0)和arg(1))。因此,arg只是获取给定索引处的参数/实参的方法。

然后,当参数为3时,可以得到三个参数: 0,1,2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55575231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档