关于prolog中的c()谓词
我有密码 新计划(状态[c(状态列表)],[],状态):-满足(状态,状态列表)关于prolog中的c()谓词,prolog,Prolog,我有密码 新计划(状态[c(状态列表)],[],状态):-满足(状态,状态列表) 我不知道c()谓词做什么。我试图在网上搜索答案,但找不到。请帮帮我。在这个代码中,c/1只是一个结构。Prolog与大多数语言略有不同,因为结构和谓词(在另一种语言中可能被认为是函数调用)共享语法。所以这里c/1没有任何作用,它只是一个标记,它(大概)通过代码中的其他东西被赋予了意义,而您没有与我们共享 让我给你举个具体的例子 eval(c(X), X2) :- X2 is (X*2) + 3. eval(q(X)
我不知道c()谓词做什么。我试图在网上搜索答案,但找不到。请帮帮我。在这个代码中,
c/1
只是一个结构。Prolog与大多数语言略有不同,因为结构和谓词(在另一种语言中可能被认为是函数调用)共享语法。所以这里c/1
没有任何作用,它只是一个标记,它(大概)通过代码中的其他东西被赋予了意义,而您没有与我们共享
让我给你举个具体的例子
eval(c(X), X2) :- X2 is (X*2) + 3.
eval(q(X), X2) :- X2 is X / 3.
something_to_do(c(14)).
something_to_do(q(21)).
在此代码中,c/1
和q/1
不执行任何操作。如果您查询要做的事情/1
,您将返回以下结构:
?- something_to_do(X).
X = c(14) ;
X = q(21) ;
false.
但是,如果您随后将该结构传递给eval/2
,它将根据得到的结构执行某些操作。因此,你可以说eval/2
赋予结构q/1
和c/1
以意义(尽管“灌输意义”在任何意义上都不是官方序言术语)
这里的情况也一样。您必须搜索您的代码库并找出c/1
在其中的含义,因为它不是一个内置谓词
注意:可以在同一个代码库中同时使用具有相同名称的结构和谓词。例如,我可以添加一个谓词,如
q(foo).
q(bar).
q(X) :- even(X).
这个谓词在任何意义上都不会与上面的q/1
结构重叠。这只是关于Prolog的有趣而混乱的事情之一(后来证明它是强大而宏大的)。创建结构和试图统一目标之间存在着巨大的差异
q(foo).
q(bar).
q(X) :- even(X).