【问题标题】:prolog dynamic predicates difference between /1 and /2prolog动态谓词/1和/2之间的区别
【发布时间】:2020-11-11 17:50:47
【问题描述】:

我是 Prolog 语言的初学者,我处于使用 dynamic/1 的情况。在我的代码中有一行,例如:

:- dynamic actual_position/1, at/2, holding/1, talked/1, examined/1.

我想了解为什么 actual_position 有 /1 而 at which 有 /2。

谢谢!

【问题讨论】:

  • /中的个数指定参数个数。
  • 我明白了,非常感谢!

标签: dynamic prolog predicate


【解决方案1】:

斜杠后面的数字(/)是谓词的arity:它是它所接受的参数个数。所以member/2 表示member 谓词或具有两个参数的函子。

arity 很重要,因为就像在 Java 中一样,可以重载谓词名称:可以定义多个具有相同 name 但arity 不同的谓词。例如,append/2 [swi-doc]列表列表 连接到单个列表,而 append/3 [swi-doc] 将两个列表一起附加到单个列表中。

【讨论】:

  • 我们有 DCG 规则:foo//2 为线程列表采用两个隐藏参数。但是,(算术)函数没有固定的语法:foo/(2) 会很好。对于 SWI-Prolog 字典相关的谓词(我喜欢将其命名为点调用。.foo/2 会很好。
  • @DavidTonhofer:我们无法在 ISO-Prolog 中定义算术函数,因此不可能进行 arity-overloading。算术函数大多是一元或二元的。如果我们使用一个,我们就知道哪个是哪个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2018-05-08
  • 1970-01-01
相关资源
最近更新 更多