我看到一个问题,询问 [a,b,c]=..L. 返回什么。
在测试时,我看到它返回: L = ['.', a, [b, c]]

我不明白为什么会发生这种情况,我无法从 documentation 了解大学的性质。理解这一点将有助于我理解大学。

最佳答案

发生这种情况是因为序言中列表的表示是一个树数据结构,就像这样。 prolog - Array Univ var ([x,y]=..T) - 序言-LMLPHP 它的顶部节点是一个“点”,左侧是头部,如果尾部不为空,则在右侧又是一个点,头部在左侧,“点”在右侧。当你这样做时,你只是在创建一个谓词(好吧,不是精确的谓词,但有时需要,因为我展示了一个例子):假设我写:

V=..[somefunctor,X,Y,Z]

然后它会自动构造一个这样的谓词:
   somefunctor(X,Y,Z).

现在为什么我们需要这个?假设我用这些术语调用谓词: predicate(somefunctor,term,term2,term3) 和谓词或规则看起来像这样: predicate(X,Y,Z,T) 我问你无论 X 中有什么谓词,你都必须用参数 Y,Z,T 调用这个谓词。可能你认为你通过这样写来调用这个谓词:X(Y,Z,T) 但不幸的是它在 prolog 中是不允许的,所以在这里你可以使用 V=..[X,Y,Z,T] ,其中 X 应该作为第一个参数放置,因为它是谓词名称,因此您会得到如下内容:V = somefunctor(term,term2,term3) 并且这在内部发生。为了调用这个谓词,你可以使用 call 谓词:
call(V) where `call/1` is a metapredicate and `V=..`  is a not logical predicate.

关于prolog - Array Univ var ([x,y]=..T) - 序言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47024620/

10-10 04:25