结构s()在Prolog中代表什么?

结构s()在Prolog中代表什么?,prolog,Prolog,我有一段Prolog中的示例代码。我想知道谓词/规则/函子s()在Prolog中是什么意思?(在以宽度\u搜索开始的行上)。在上面的示例代码中,我没有看到这个构造的任何声明。它可能是一个系统谓词。谁知道呢 main(Decision) :- initial_state(State), breadth_search([s(State,[])],[],[],Decision), writeln(Decision). 它只是代表“它自己” s(状态,[]) 只是一个结构

我有一段Prolog中的示例代码。我想知道谓词/规则/函子s()在Prolog中是什么意思?(在以宽度\u搜索开始的行上)。在上面的示例代码中,我没有看到这个构造的任何声明。它可能是一个系统谓词。谁知道呢

main(Decision) :-
     initial_state(State),
     breadth_search([s(State,[])],[],[],Decision),
     writeln(Decision).
它只是代表“它自己”

s(状态,[])

只是一个结构/图形(“术语”),实际上是一棵树,具有:

  • s
    标记为根的节点
  • 两个论点
    • 变量名
      State
      指定为arg1的内容(如果该变量未绑定,则可能是“空单元格”)
    • 表示空列表为arg2的特殊常量(取决于实现,这可能是也可能不是“空指针”;在SWI Prolog中,它是一个特殊的“原子”项,这是正确的实现决策IMHO)
s
|
+----+----+
|         |
国家[]
它只是代表“它自己”

s(状态,[])

只是一个结构/图形(“术语”),实际上是一棵树,具有:

  • s
    标记为根的节点
  • 两个论点
    • 变量名
      State
      指定为arg1的内容(如果该变量未绑定,则可能是“空单元格”)
    • 表示空列表为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,[]))
我们在学校应该有更多这样的语言!考虑到“在被操纵之前,所有的东西都被编译成了一些二进制的乱七八糟的东西”,这就排除了很多可能性。我们应该在学校里有更多这样的语言!“在被操纵之前,所有东西都被编译成二进制的乱七八糟”这样的想法排除了很多可能性。