list - Prolog:过滤列表?

标签 list filter prolog meta-predicate

我目前正在做一个关于 Prolog 的非常短的项目,只是在尝试将我创建的“过滤器”应用于列表时遇到了困难。我已经准备好你可以称之为过滤器的东西,但我无法应用它。如果我说明一下会更好:

filter(A, B) 

...如果满足某些条件,则输出“真”。
filterList(A, [X, Y, Z])

...输出一个列表,其中包含第二个参数中使过滤器输出 的所有元素假 . (因此,如果 filter(A, X) 为真,则输出为 [Y, Z] )。

我已经准备好“过滤器”函数,但现在我需要将它应用到列表中,如第二个示例所示,不包括使用第一个参数应用时过滤器返回 true 的所有元素。

因此,如果过滤器是简单的 A == B,则该函数应该接收 A [A,B,A,C,D,A] 并输出 [B,C,D],并删除所有显然,过滤器适用。

我在函数的基本结构上遇到了麻烦,所以如果有人可以为这样的函数提供一个基本的大纲,那将会有很大的帮助。我已经尽可能地简化了我的情况,所以我可以接受你可以提供的任何东西,并根据我的需要进行修改。

提前致谢!

最佳答案

SWI-Prolog 提供 exclude/3和其他这样的元谓词。您的原始问题可以这样编码:

are_identical(X, Y) :-
    X == Y.

filterList(A, In, Out) :-
    exclude(are_identical(A), In, Out).

使用示例:
?- filterList(A, [A, B, A, C, D, A], Out).
Out = [B, C, D].

关于list - Prolog:过滤列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/297996/

相关文章:

prolog - 为什么这个 Prolog 规则不会进入无限循环?

html - 整个网站呈灰度,除了一些 div 不工作

javascript - 在搜索字符串的子部分时如何过滤 JSON?

parsing - Prolog - 解析

python - 列表列表更改意外地反射(reflect)在子列表中

Python 随机样本异常

C:更改列表的下一个指针

css - div 外的列表项背景图片

filter - 有什么理由在投影上使用 css box-shadow 吗?

prolog - 使用序言打印偶数 :