3 で割り切れるリスト (つまりx % 3 == 0
) からすべての要素を削除するにはどうすればよいですか?
user721588
質問する
221 次
3 に答える
2
ここに述語 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 = [].
于 2012-06-07T10:13:52.223 に答える
2
これを行う慣用的な方法は、高次を使用することです。たとえば、SWI では、必要な exclude/3
処理を正確に実行する (述語に基づいて要素を削除する)という優れた述語があります。
clean(List, FilteredList) :-
exclude(mod3, List, FilteredList).
mod3(X) :-
X mod 3 =:= 0.
そして、ラムダライブラリを使用すると、高次の方がはるかに洗練されています。
:- use_module(lambda).
filterMod3(List, FilteredList) :-
exclude(\X^(X mod 3 =:= 0), List, FilteredList).
于 2012-06-08T09:27:15.870 に答える
0
またははるかに単純findall(X,(member(X,[1,2,3,4,5,6,7,8,9,10]),0 =:= X mod 3),Y).
于 2012-06-07T20:41:25.083 に答える