【发布时间】:2014-01-19 18:31:34
【问题描述】:
我想知道为什么当我尝试这样做时我的 SWI Prolog 出现错误:
(signal(X) = signal(Y)) :- (terminal(X), terminal(Y), connected(X,Y)).
terminal(X) :- ((signal(X) = 1);(signal(X) = 0)).
我收到以下错误
错误:trabalho.pro:13:无权修改静态过程 '(=)/2'
它无法识别第一行中的"=",但第二行“编译”。我猜它只接受 "=" 之后的 :- ?为什么?
我是否需要为此创建一个谓词:"equal(x,y) :- (x = y)"?
【问题讨论】:
-
只需将其重命名为
equal_signals(X,Y):- ...。=/2是系统谓词,这里不能也不需要修改。 -
(Signal(t) = 1) OR ( Signal(t) = 0)转换为 Prolog 为signal(T,S), (S=1 ; S=0)。如果你有一个“函数”signal,它的“返回”会导致它的第二个参数。但是您的问题中没有包含任何解释,我们只能猜测。也许你可以先解释一下你有什么,你的问题集是在哪个“世界”中,你想达到什么目标。
标签: prolog