插入(X,[],[X])。插入最后一个位置

时间:2021-02-15 19:50:28

标签: prolog

这个谓词用于在列表的最后一个位置插入一个值:

 insert(X, [], [X]).
insert(X, [H|T], [H|T]):-insert(X, T, [T|X]).

我得到'假',当这个查询被执行时:

?- insert(15, [16, 14, 9], R).

为什么,以及如何解决这个问题。

1 个答案:

答案 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
相关问题