序言:将列表过滤到列表中

用户名

我想在Prologue中从一个列表中创建一个过滤器,以过滤出所有与过滤器匹配的元素。

Example: filter(list, element, result)
?- filter([1,2,3,2,3,1,5],3,X).
X=[3,3]

但是我创建了一个过滤器,到目前为止仅输出true或false。

过滤器([L | Y],X,OUT):-
    过滤器(Y,X,OUT)。

我现在不知道如何创建列表。

威廉·范昂塞姆

实际上,您实际上不需要自己实现过滤器。有一个过滤谓词include/3[swi-doc]

filter(L, X, R) :-
    include(==(X), L, R).

您也可以自己通过递归实现。这里的基本情况是一个空列表:

filter([],_,[]).

对于递归情况,您可以创建一个if-then-else表达式,根据是否满足条件,创建一个(不)带有该元素的列表:

filter([Y|T], X, R) :-
    (  X == Y
    -> …
    ;  …
    ),
    filter(T, X, S).

在这里,您仍然需要填写自己的信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章