0

我有代码

newplan(State, [c(StateList)], [], State):- 满意(State, StateList)。

而且我不知道 c() 谓词的作用。我试图在互联网上搜索答案,但我找不到。请帮我。

4

1 回答 1

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/1q/1没有任何事情。如果您查询something_to_do/1,您将获得结构:

?- something_to_do(X).
X = c(14) ;
X = q(21) ;
false.

但是,如果您随后将该结构传递给eval/2它,则取决于它获得的结构。所以你可以说eval/2赋予结构q/1c/1意义(尽管“赋予意义”在任何意义上都不是官方 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 的那些有趣而令人困惑的事情之一(后来证明它是强大而伟大的)。创建结构和尝试统一目标之间存在巨大差异。

于 2013-04-23T02:46:02.303 回答