我想在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] 删除。
我来说两句