我在Prolog中有一段示例代码。我想知道谓词/规则/函子s()在Prolog中意味着什么?(以breadth_search).开头的在线在示例代码中,我没有看到这个构造的任何声明。它可能是一个系统谓词。谁知道呢?
main(Decision) :-
initial_state(State),
breadth_search([s(State,[])],[],[],Decision),
writeln(Decision).发布于 2021-04-02 13:45:23
它只是“代表自己”。
s(State,[])
只是一个结构/图(“术语”),实际上是一棵树,具有:
IMHO) -
s的节点,它被标记为根State指定为arg1 (如果该变量未绑定,它可能是“空单元”)H 110表示空列表为arg2的特殊常量(取决于实现,这可能是一个“空指针”,也可能不是“空指针”;在SWI中,它是一个特殊的“原子”术语,这是正确的实现决定。
s
|
+----+----+
| |
State []发布于 2021-04-02 14:05:30
你写道:
“我没有在示例代码上看到这个构造的任何声明。
为什么应该有呢?Prolog不是 language。Prolog的谓词不计算它们的参数。一切都是象征性的。每一条数据都是象征性的。它不会被评估。它保持原样。
特别是,Prolog的一些术语属于“复合”术语的范畴。它们有一个标签-- Prolog术语中的“函子”,还有一些“参数”。眼见为实,所以
a_functor( arg1, arg2, arg3 )是一个复合词,指“性质”3 (a.k.a.“三元”项),有三个参数和一个函子a_functor。函子必须是简单原子,参数可以是任何有效的Prolog项,包括逻辑变量。
因此,
s(State,[])是第2 (a.k.a )的复合词的另一个例子。“二进制”项),带有函子s (一个简单的原子)和两个参数,一个逻辑变量State和一个术语[]。
这就是全部。
https://stackoverflow.com/questions/66920023
复制相似问题