微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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具有= ..运算符,它解决了他所有的问题,订单逻辑可能.

原文地址:https://www.jb51.cc/html5/168711.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。