返回true后出现Prolog错误?
我对使用Prolog还不熟悉,所以可能我遗漏了一些明显的东西。我正在制定一个Tribonaci规则。与Fib相同,但返回true后出现Prolog错误?,prolog,Prolog,我对使用Prolog还不熟悉,所以可能我遗漏了一些明显的东西。我正在制定一个Tribonaci规则。与Fib相同,但Trib[N]=Trib[N-1]+Trib[N-2]+Trib[N-3],其中0、1、2分别为0、0、1 到目前为止,我得到的是: trib(0,0). trib(1,0). trib(2,1). trib(N,T) :- A is N-1, B is N-2, C is N-3, trib(A,AT), trib(B,BT),
Trib[N]=Trib[N-1]+Trib[N-2]+Trib[N-3]
,其中0、1、2分别为0、0、1
到目前为止,我得到的是:
trib(0,0).
trib(1,0).
trib(2,1).
trib(N,T) :- A is N-1,
B is N-2, C is N-3,
trib(A,AT), trib(B,BT),
trib(C,CT), T is AT+BT+CT.
我得到了对trib(10,X)
和其他情况的正确输出,但当它返回时,我得到:
?- trib(4,X).
X = 2
Unknown action: (h for help)
Action?
我相信它是在返回X后发现错误的
它似乎在等待commant停止(进入),或寻找更多(空间)
打印答案后如何使其停止?我通过将(0,1,2)定义为
trib(0,0):-!,找到了问题的答案代码>@Enigmativity几乎是对的。你应该使用代码>在所有谓词中,结尾处。那么prolog将无法尝试其他解决方案。例如:
trib(0,0) :- !.
trib(1,0) :- !.
trib(2,1) :- !.
trib(N,T) :- A is N-1,
B is N-2, C is N-3,
trib(A,AT), trib(B,BT),
trib(C,CT), T is AT+BT+CT, !.
其他两种解决方案:
将另一个谓词与李>
将另一个谓词与one连用
因此,在您的用例中:
trib(0,0).
trib(1,0).
trib(2,1).
trib(N,T) :- A is N-1,
B is N-2, C is N-3,
trib(A,AT), trib(B,BT),
trib(C,CT), T is AT+BT+CT,
tribonacci1(N,T) :- trib(N,T),!.
tribonacci2(N,T) :- once(trib(N,T)).
如果调用它们,它们(tribbonacci1和tribonacci2)将执行一次
场外:
如果您想让它更高效,请尝试使用带有3个累加器的辅助函数。它似乎在等待commant停止(输入),或寻找更多(空间)。如何在打印答案后使其停止?请尝试将N>2
放在最后一个谓词中,以防止它变为负数,并尝试重新计算基本情况。N>2有助于避免在我继续(空格)时耗尽堆栈。但现在它返回false。我如何在找到一个答案后让它停止?我不需要它返回到选择点。您的查询应该会成功。Prolog仅在配置为继续时才继续。您的程序没有。当您在常规大小写谓词中有N>2
时,这不会有什么区别。