这个谓词用于在列表的最后一个位置插入一个值:
insert(X, [], [X]).
insert(X, [H|T], [H|T]):-insert(X, T, [T|X]).
我得到'假',当这个查询被执行时:
?- insert(15, [16, 14, 9], R).
为什么,以及如何解决这个问题。
答案 0 :(得分:0)
问题是不可能在列表X
的末尾插入元素[H|T]
并获得相同的列表[H|T]
,正如在谓词insert/3
的定义。
显然,结果列表必须与原始列表不同,并且差异必须在其尾部(因此,结果列表的尾部必须由不同的变量表示,例如 U
)。此外,新列表 U
必须是在列表 X
末尾插入元素 T
的结果。
因此,谓词insert/3
的正确定义是:
insert(X, [], [X]).
insert(X, [H|T], [H|U]):-
insert(X, T, U).
示例:
?- insert(15, [16, 14, 9], R).
R = [16, 14, 9, 15] ;
false