1

以下のように、リストを提供し、最初のリストに偶数がある新しいリストを返すプログラムを作成しようとしています。

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.
4

2 に答える 2

1

mod 2あなたは近いです-操作が失敗したときに最初の要素を削除するものが必要です。また、「コピー」ルールは完全に正しくありませんでした。

これを試して:

evennom([], []).
evennom([H|T1], [H|T2]) :- H rem 2 =:= 0, !, evennom(T1, T2).
evennom([_|T1], T2) :- evennom(T1, T2).
于 2012-04-21T02:21:58.790 に答える
0

Prologはあなたのために再帰を行います..

evennom(ListIn, ListOut) :-
    findall(Even, (nth0(_, ListIn, Even), 0 is (Even mod 2)), ListOut).
于 2012-04-21T15:23:38.400 に答える