结构s()在Prolog中代表什么?
我有一段Prolog中的示例代码。我想知道谓词/规则/函子s()在Prolog中是什么意思?(在以宽度\u搜索开始的行上)。在上面的示例代码中,我没有看到这个构造的任何声明。它可能是一个系统谓词。谁知道呢结构s()在Prolog中代表什么?,prolog,Prolog,我有一段Prolog中的示例代码。我想知道谓词/规则/函子s()在Prolog中是什么意思?(在以宽度\u搜索开始的行上)。在上面的示例代码中,我没有看到这个构造的任何声明。它可能是一个系统谓词。谁知道呢 main(Decision) :- initial_state(State), breadth_search([s(State,[])],[],[],Decision), writeln(Decision). 它只是代表“它自己” s(状态,[]) 只是一个结构
main(Decision) :-
initial_state(State),
breadth_search([s(State,[])],[],[],Decision),
writeln(Decision).
它只是代表“它自己”
s(状态,[])
只是一个结构/图形(“术语”),实际上是一棵树,具有:
- 将
标记为根的节点s
- 两个论点
- 变量名
指定为arg1的内容(如果该变量未绑定,则可能是“空单元格”)State
- 表示空列表为arg2的特殊常量(取决于实现,这可能是也可能不是“空指针”;在SWI Prolog中,它是一个特殊的“原子”项,这是正确的实现决策IMHO)
- 变量名
s
|
+----+----+
| |
国家[]
它只是代表“它自己”
s(状态,[])
只是一个结构/图形(“术语”),实际上是一棵树,具有:
- 将
标记为根的节点s
- 两个论点
- 变量名
指定为arg1的内容(如果该变量未绑定,则可能是“空单元格”)State
- 表示空列表为arg2的特殊常量(取决于实现,这可能是也可能不是“空指针”;在SWI Prolog中,它是一个特殊的“原子”项,这是正确的实现决策IMHO)
- 变量名
s
|
+----+----+
| |
国家[]
您写道:
“我没有看到上述示例代码的任何构造声明。”
为什么会有呢?Prolog不是一个简单的语言。Prolog的谓词不计算它们的参数。一切都是象征性的。每一段数据都是符号化的。它不会被评估。它保持原样
特别是,一些序言的术语属于“复合”术语的范畴。它们有一个标签,用Prolog的说法是“函子”,还有一些“参数”。眼见为实,所以
a_functor( arg1, arg2, arg3 )
是一个复合项,属于“arity”3(也称为“Trimal”项),有三个参数和一个函子a_函子
。函子必须是简单的原子,参数可以是任何有效的Prolog术语,包括逻辑变量
因此,
是一个复合项的另一个例子,它是一个算术2(也称为“二进制”项),带有函子s
(一个简单的原子)和两个参数,一个逻辑变量State
,一个术语[]
这就是全部。您写道:
“我没有看到上述示例代码的任何构造声明。”
为什么会有呢?Prolog不是一个简单的语言。Prolog的谓词不计算它们的参数。一切都是象征性的。每一段数据都是符号化的。它不会被评估。它保持原样
特别是,一些序言的术语属于“复合”术语的范畴。它们有一个标签,用Prolog的说法是“函子”,还有一些“参数”。眼见为实,所以
a_functor( arg1, arg2, arg3 )
是一个复合项,属于“arity”3(也称为“Trimal”项),有三个参数和一个函子a_函子
。函子必须是简单的原子,参数可以是任何有效的Prolog术语,包括逻辑变量
因此,
是一个复合项的另一个例子,它是一个算术2(也称为“二进制”项),带有函子s
(一个简单的原子)和两个参数,一个逻辑变量State
,一个术语[]
就这些。为什么需要它?s()的全名是什么?s()表示结构???
s
可以是任何东西。您可以在根目录下使用foo
构建结构:foo(bar,baz)
。将其视为一个对象的声明+初始化。@ NickReshetinsky Note,该结构根据您如何使用它来获取意义。例如,如果某个地方有一个谓词s/2
(即名为s
,有两个参数),您可以调用它:call(s(State,[]))
为什么需要它?s()的全名是什么?s()表示结构???s
可以是任何东西。您可以在根目录下使用foo
构建结构:foo(bar,baz)
。将其视为一个对象的声明+初始化。@ NickReshetinsky Note,该结构根据您如何使用它来获取意义。例如,如果某个地方有一个谓词s/2
(即名为s
,有两个参数),您可以将其称为:call(s(State,[]))
我们在学校应该有更多这样的语言!考虑到“在被操纵之前,所有的东西都被编译成了一些二进制的乱七八糟的东西”,这就排除了很多可能性。我们应该在学校里有更多这样的语言!“在被操纵之前,所有东西都被编译成二进制的乱七八糟”这样的想法排除了很多可能性。