我是使用Prolog的新手,所以也许我错过了一些明显的东西。我正在制定一个Tribonacci规则。与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(C,CT), T is AT+BT+CT.
我得到正确的输出到trib(10,X)
和其他情况,但当它返回时,我得到:
?- trib(4,X).
X = 2
Unknown action: (h for help)
Action?
我相信在返回X后会发现错误。
似乎在等待commant停止(输入),或者寻找更多(空格)。
打印答案后如何让它停止?
答案 0 :(得分:0)
我通过将(0,1,2)定义为trib(0,0) :- !.
答案 1 :(得分:-1)
@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, !.
其他两个解决方案:
所以在你的用例中:
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)都会执行一次。
<强> Offtop:强>
如果您希望它更有效,请尝试使用带有3个累加器的辅助函数。