예제에 표시된대로 목록의 모든 요소를 표시해야합니다. 프로그램을 실행하고 재귀를 위해 predecate를 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 끝에 나타나는 이유는 무엇입니까? 그것을 고치는 방법?
문제는 multiply/4
재귀 종료 조건에 있습니다.
multiply(X, [_|X], _, X).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다