No *_*lar 16 list append prolog in-place difference-lists
如果我在Prolog中有一个列表,例如X = [1,2,3,4],如何将元素5添加到列表的末尾以使X = [1,2,3,4,5]?
append函数需要两个列表,即追加(A,B,C)以获得A和B连接到列表C.
我可以用临时列表Y = [1,2,3,4]和Z = [5]来做这个,然后做一个追加(Y,Z,X),但我不喜欢有一个临时列表.
通常的免责声明适用于此 - 这不是家庭作业,我只是在学习Prolog.
正如其他人所指出的那样,你将陷入性能问题.
但就像练习一样,我决定尝试创建一个谓词,可以将一个元素附加到列表的末尾,而不使用append.
% add_tail(+List,+Element,-List)
% Add the given element to the end of the list, without using the "append" predicate.
add_tail([],X,[X]).
add_tail([H|T],X,[H|L]):-add_tail(T,X,L).
Run Code Online (Sandbox Code Playgroud)
我建议您只使用该append功能,作为内置功能,它可能比手动制作的任何东西都快.
Prolog中的变量只能分配一次.只要X具有值[1,2,3,4],它就永远不会有另一个值.像你提到的那样,一个临时变量和追加/ 3就是这样做的方法.
话虽如此,你可以做一个可能不推荐的技巧.如果X = [1,2,3,4,Y]那么你可以做Y = 5而X现在有你想要的值.我相信这种技术被称为差异列表.
| 归档时间: |
|
| 查看次数: |
48226 次 |
| 最近记录: |