我看到一个问题,询问 [a,b,c]=..L.
返回什么。
在测试时,我看到它返回: L = ['.', a, [b, c]]
。
我不明白为什么会发生这种情况,我无法从 documentation 了解大学的性质。理解这一点将有助于我理解大学。
最佳答案
发生这种情况是因为序言中列表的表示是一个树数据结构,就像这样。 它的顶部节点是一个“点”,左侧是头部,如果尾部不为空,则在右侧又是一个点,头部在左侧,“点”在右侧。当你这样做时,你只是在创建一个谓词(好吧,不是精确的谓词,但有时需要,因为我展示了一个例子):假设我写:
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/