我必须在列表中显示所有元素,如示例所示。
Element: el, List: L. [L1el1, L2el1], [L1el2, L2el1], [L1el3, L2el1]...
我使用multiply/3
预定义来运行程序,使用multiply/4
进行递归。当它变空时,它会从'Tmp'恢复'L1'(仅当L2不为空时。否则,终止递归)。
抽象示例:
for element l in List1 {
for element k in List2 {
print([k, l]);
}
}
my_code.pl
multiply(L1, L2, X):-
multiply(L1, L2, L1, X).
multiply(X, [], _, X).
multiply([], [_|T], Tmp, X):-
multiply(Tmp, T, Tmp, X),!.
multiply([H|T], [H1|T1], Tmp, [[H,H1]|X]):-
multiply(T, [H1|T1], Tmp, X).
预期:
?- multiply([1,2,3], [a,b], X).
X = [[1, a], [2, a], [3, a], [1, b], [2, b], [3, b]].
我得到了什么:
?- multiply([1,2,3], [a,b], X).
X = [[1, a], [2, a], [3, a], [1, b], [2, b], [3, b], 1, 2, 3].
如何获得预期结果稍微修改此代码。 不使用内置谓词!
为什么L1出现在X的末尾?如何解决?
答案 0 :(得分:-1)
问题出在multiply/4
递归退出条件。
multiply(X, [_|X], _, X).