我有代码
newplan(State,[c(StateList)],[],State): - satisf(State,StateList)。
我不知道c()谓词是做什么的。我试图搜索互联网寻找答案,但我找不到。请帮帮我。
答案 0 :(得分:0)
在此代码中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
不会执行任何操作。如果您查询something_to_do/1
,您将获得结构:
?- something_to_do(X).
X = c(14) ;
X = q(21) ;
false.
但是如果你然后将那个结构传递给eval/2
,它会根据它得到的结构做一些事情。所以你可以说eval/2
使结构q/1
和c/1
具有意义(尽管“imbuing meaning”在任何意义上都不是官方的Prolog命名法。)
?- something_to_do(X), eval(X, Y).
X = c(14), Y = 31 ;
X = q(21), Y = 7 ;
false.
这是同一个故事。您将不得不搜索代码库并找出其中c/1
的含义,因为它不是内置谓词。
注意:可以在同一代码库中同时具有相同名称的结构和谓词。例如,我可以添加一个谓词
q(foo).
q(bar).
q(X) :- even(X).
并且此谓词在任何意义上都与上面的q/1
结构不重叠。这只是关于Prolog的一些有趣的混乱事物之一(后来证明它是强大而宏伟的)。创建结构和尝试统一目标之间存在着巨大的差异。