我目前正在Prolog上进行一个非常短的项目,只是试图将我创建的“过滤器”应用到列表中而陷入困境。我已经准备好了您可以称为过滤器的内容,但是我无法应用它。如果我说明一下会更好:filter(A, B) ...如果满足某些条件,则输出'true'。filterList(A, [X, Y, Z])...输出一个列表,其中包含第二个参数中使过滤器输出false的所有元素。(因此,如果filter(A,X)为true,则输出为[Y,Z])。我已经准备好“过滤器”功能,但是现在我需要将其应用到第二个示例所示的列表中,但不包括在与第一个参数一起应用时过滤器返回true的所有元素。因此,如果过滤器是简单的A == B,则该函数应该接收A [A,B,A,C,D,A]并输出[B,C,D],并删除了所有显然,该过滤器适用。我在使用该函数的基本结构时遇到了麻烦,因此,如果有人可以为此类函数提供基本轮廓,那将很有帮助。我已尽可能简化我的情况,以便您可以根据我的需要提供和修改它。提前致谢!
3 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
如果要在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).
我对这个谓词有疑问,请在评论中问我。读报纸也很值得推荐,它也definess map,foldr以及compose!请注意,他提到的许多限制(例如,缺失call/3或更高阶的限制apply都不再适用。SWI-Prolog具有=..运算符,该运算符可解决他的所有问题,并使任意n阶逻辑成为可能。
- 3 回答
- 0 关注
- 503 浏览
添加回答
举报
0/150
提交
取消