首页 > 解决方案 > 从 SWI-Prolog 中的列表中删除

问题描述

我是 SWI-Prolog 的初学者,我有一个问题。请帮我。如何从列表中删除最后出现的 9?

例子:

?- delete([9,9,9])
[9,9]
?- delete([9,4,1,2,3,9,53,2,9,2])
[9,4,1,2,3,9,53,2,2]

标签: prolog

解决方案


您必须 1) 将列表分解为一个Prefix列表(可能包含 9)、一个[9]单元素列表和一个Suffix列表(不包含 9),然后连接PrefixSuffix列表。写一个谓词来发现PrefixSuffix给定一个列表L

如果我们不从程序上或按照“这将在 CPU 中花费多少”的思路进行思考,那么decompose(List,Prefix,Suffix)发现PrefixSuffix可以写在一个单独的子句中的谓词,一个纯逻辑语句,使用append/2andmember/2和 negation 为失败。

List只需要第二行来涵盖开头没有 9 的情况。


推荐阅读