2

リストのサイズが偶数かどうかを評価する述語を作成しようとしましたが、これはリストの長さや算術演算を計算せずに行う必要があります。長さを計算するより簡単だと思われますが、それなしでそれを行う方法を考えるのに苦労しています。私は一種の再帰的なテクニックを推測していますが、誰かがそれを助けることができれば素晴らしいでしょう.

4

4 に答える 4

7

はい、再帰が必要です。基本ケースは、最小の奇数/偶数リストであり、必要なのは、再帰呼び出しを構築して基本ケースに到達する方法を理解することだけです。「oddList」に対して true を返す長さ 3 のリストを想像することから始めることができます。それが基本的なケースでない場合、次の論理的なステップは何ですか? 奇数リストと偶数リストの違いは?

于 2012-05-14T09:57:36.000 に答える
2

foldl/4Prolog ラムダを使用する必要があるのは、次のとおりです。

evenlength(Xs) :-
   foldl(\_^E^O^(O is \E),Xs,1,1).   % each item in `Xs` flips the "evenness flag"

サンプルの使用:

?- evenlength([]).
true.

?- evenlength([_]).
false.

?- evenlength([_,_]).
true.

?- evenlength([_,_,_]).
false.

?- evenlength([_,_,_,_]).
true.

最も一般的なクエリを忘れないでください!

?- evenlength(Xs).
  Xs = []
; Xs = [_A,_B]
; Xs = [_A,_B,_C,_D]
; Xs = [_A,_B,_C,_D,_E,_F] 
...
于 2015-09-15T17:32:52.443 に答える