我是新來的Prolog和作爲一個練習,我想做一個列表反轉謂詞。它使用add_tail
謂我前面—做了一些零件可能是多餘的,但我不在乎:爲什麼我的Prolog謂詞反轉/ 2不起作用?
add_tail(A, [], A) :-
!.
add_tail([A|[]], H, [A,H]) :-
!.
add_tail([A|B], H, [A|C]) :-
add_tail(B,H,C).
它的工作原理相同,內置謂詞append/3
:
?- add_tail([a,b,c], d, A).
A = [a, b, c, d].
?- append([a,b,c], [d], A).
A = [a, b, c, d].
當我在使用append
我invert
謂語,它工作正常,但如果我用add_tail
,它失敗:
invert([], []).
invert([A|B], C) :-
invert(B, D),
append(D, [A], C).
invert2([], []).
invert2([A|B], C) :-
invert2(B, D),
add_tail(D, A, C).
?- invert([a,b,c,d], A).
A = [d, c, b, a].
?- invert2([a,b,c,d], A).
false. % expected answer A = [d,c,b,a], like above
我的錯誤究竟是什麼?謝謝!
S(X)對更一般的用途將重心轉移。 – repeat