1

以前の質問に関して、反対の結果が必要な場合は、重複が存在するかどうかを調べてください。

[1,2,2,3,4,5,6] should return false
[1,2,3,4,5,6,7] should return true
[1,2,3,4,5,6,1] should return false

どうすればそれを手に入れることができますか:

fun duplicated [] = false
| duplicated (x::xs) = (List.exists (fn y => x = y) xs) orelse (duplicated xs)

例えば、

fun non_duplicated ps =
case ps of
[] => false
| x::xs' => (List.exists (fn y => x<>y) xs') andalso (non_duplicated xs')

動作しません。

なぜ???ありがとう。

4

1 に答える 1

4

反対の結果を取得したい場合は、関数を次のように定義するだけです。

fun non_duplicated xs = not (duplicated xs)

そうは言っても、ド・モルガンの法則を使用して関数notの本体を内側に押すことができます。duplicated

not (a orelse b) <=> (not a) andalso (not b)
not exists equal <=> forall (not equal)
not false <=> true

次に、反対のバージョンに到達します。

fun non_duplicated [] = true
  | non_duplicated (x::xs) = 
      (List.forall (fn y => x <> y) xs) andalso (non_duplicated xs)
于 2013-02-07T11:53:13.287 に答える