以下のように、リストを提供し、最初のリストに偶数がある新しいリストを返すプログラムを作成しようとしています。
evennom([1,3,2,4,3,2,1,2],out)
out = [2,4,2,2]
私のコードは以下の通りです:
evennom([],[]).
evennom(H1|T1],[H2|T2):- H2 is H1 mod 2.
以下のように、リストを提供し、最初のリストに偶数がある新しいリストを返すプログラムを作成しようとしています。
evennom([1,3,2,4,3,2,1,2],out)
out = [2,4,2,2]
私のコードは以下の通りです:
evennom([],[]).
evennom(H1|T1],[H2|T2):- H2 is H1 mod 2.
mod 2
あなたは近いです-操作が失敗したときに最初の要素を削除するものが必要です。また、「コピー」ルールは完全に正しくありませんでした。
これを試して:
evennom([], []).
evennom([H|T1], [H|T2]) :- H rem 2 =:= 0, !, evennom(T1, T2).
evennom([_|T1], T2) :- evennom(T1, T2).
Prologはあなたのために再帰を行います..
evennom(ListIn, ListOut) :-
findall(Even, (nth0(_, ListIn, Even), 0 is (Even mod 2)), ListOut).