Prolog:过滤列表?

前端之家收集整理的这篇文章主要介绍了Prolog:过滤列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在Prolog上进行一个非常短的项目,只是试图将一个“过滤器”应用到列表中.我有你可以称之为过滤器准备好,但我不能应用它.如果我说明会更好:
filter(A,B)

…如果满足某些条件,则输出“true”.

filterList(A,[X,Y,Z])

输出一个列表,其中包含第二个参数的所有元素,使得过滤器输出为false. (所以如果滤波器(A,X)为真,输出为[Y,Z]).

我已经准备好了“过滤器”功能,但现在我需要将其应用到第二个示例所示的列表中,排除当应用第一个参数时,过滤器返回true的所有元素.

因此,如果滤波器是一个简单的A == B,该函数应该接收A [A,B,A,C,D,A]并输出[B,D]过滤器适用,显然.

我在功能的基本结构上遇到麻烦,所以如果有人能为这样的功能提供一个基本的大纲,这将是一个很大的帮助.我尽可能地简化了我的情况,所以我可以采取任何你可以提供和修改它为我的需要.

提前致谢!

解决方法

如果您正在Prolog中搜索高阶函数,那么您应该明确咨询 Naish (1995),这是一个很好的资源.

他对filter / 3的定义如下(他使用差异列表符号,因此转义必须定义filter / 4):

filter(_,[],[]).
filter(P,A0-As0,As) :-
    (
        call(P,A0) -> As = A0-As1
    ;
        As = As1
    ),filter(P,As0,As1).

我对这个谓词有疑问,请在评论中问我.阅读论文也是强烈推荐的,它也是抗拒地图,折叠和撰写!请注意,他提到的许多限制(例如,缺少呼叫/ 3或更高等级的应用程序不再适用)SWI-Prolog具有= ..运算符,它解决了他所有的问题,订单逻辑可能.

猜你在找的HTML5相关文章