【发布时间】:2016-01-25 10:20:13
【问题描述】:
我是 Prolog 的新手,作为练习,我想做一个列表倒置谓词。它使用了我之前创建的add_tail 谓词——有些部分可能是多余的,但我不在乎:
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].
当我在invert 谓词中使用append 时,它可以正常工作,但如果我使用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
我的错误到底是什么?谢谢!
【问题讨论】: