我有一个功能,我无法正常运行,我无法弄清楚原因。我认为这可能与基本情况有关。
这就是我所拥有的:
recursion(Start, [Tail|Tails], [Alpha|Alphas], Beta, [X|Xs]):-
third(Start, Alpha, S),
second(S,Beta,Tail,X),
recursion(Start, Tails, Alphas, Beta,Xs).
recursion([],[],[],_,[]).
我知道第二个功能正常工作,但是当我运行它时:
recursion([1, 2], [1, 2], [[1, 1], [2, 2]], 0, X).
我明白了:
T Call: (6) recursion([1, 2], [1, 2], [[1, 1], [2, 2]], 0, _G3980)
T Fail: (6) recursion([1, 2], [1, 2], [[1, 1], [2, 2]], 0, _G3980)
false.
可以找到我的其他谓词:
second(A,B,_,1) :- A > B.
second(A,B,C,C) :- A == B.
second(A,B,_,-1) :- A < B.
third([A|As], [B|Bs], X) :-
third(As, Bs, Z),
X is Z + A* B.
third([],[],0).
更新:
Start和Tail都是输入谓词的完全相同的列表。这就是为什么在这个例子中它们都是[1,2]。当我将基本案例更改为recursion(_,[],[],_,[]).
时,我得到:
98 ?- recursion([1, 2], [1, 2], [[1, 1], [2, 2]], 0, X).
T Call: (6) recursion([1, 2], [1, 2], [[1, 1], [2, 2]], 0, _G1632)
T Redo: (6) recursion([1, 2], [1, 2], [[1, 1], [2, 2]], 0, _G1632)
T Fail: (6) recursion([1, 2], [1, 2], [[1, 1], [2, 2]], 0, _G1632)
false.
有什么想法吗?
答案 0 :(得分:2)
由于Start
传递给recursion
未更改,因此无法访问您的基本案例。因此,它永远不会与空列表统一,这意味着只会使用recursion
的第一个子句。
看起来你的函数中没有使用Start
,所以你可能会忽略它,就像那样
recursion(_, [],[],_,[]).
或完全删除它,如下所示:
recursion([Tail|Tails], [Alpha|Alphas], Beta, [X|Xs]):-
second(5,Beta,Tail,X),
recursion(Tails, Alphas, Beta,Xs).
recursion([],[],_,[]).