簡體   English   中英

處理Prolog中的列表(刪除元素)

[英]dealing with lists in Prolog (removing elements)

如何刪除列表中可以除以3的所有元素(即x % 3 == 0 )?

這是一個謂詞removemod(+ List,+ Mod,?Result):

removemod([],_,[]).
removemod([H|T],M,[H|T2]):-
    H mod M =\= 0,
    removemod(T,M,T2).
removemod([H|T],M,T2):-
    H mod M =:= 0,
    removemod(T,M,T2).

似乎工作:

15 ?- removemod([3,7,5,12,8,2,16,13,9,11,27],3,L).
L = [7, 5, 8, 2, 16, 13, 11] .

16 ?- removemod([66933],3,L).
L = [].

這樣做的慣用方法是使用更高的順序,例如,在SWI中,有一個很好的謂詞,名為exclude/3 ,它完全符合你的要求(刪除基於謂詞的元素):

clean(List, FilteredList) :-
    exclude(mod3, List, FilteredList).

mod3(X) :-
    X mod 3 =:= 0.

使用lambda庫時 ,更高的順序更為分類:

:- use_module(lambda).

filterMod3(List, FilteredList) :-
    exclude(\X^(X mod 3 =:= 0), List, FilteredList).

或更簡單的findall(X,(member(X,[1,2,3,4,5,6,7,8,9,10]),0 =:= X mod 3),Y).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM