12

のソースコードを見ると、その理由every?が明らかになります

(every? string? []) => true

これは、every?が再帰的に実装され、再帰(nil? (seq coll))を終了するために使用されるためです。しかし、私の質問は、この行動にどのような意味があるのでしょうか? ちょうどそれにつまずいた。

を使用して問題を解決しました

(and (seq x) (every? string? x))
4

6 に答える 6

9

forall-quantifier と同じように機能するためです。つまり、最初は真であると想定され、述語を適用するたびに、それが偽であることを証明しようとします。存在量指定子 (矛盾のために Clojuresomeではなく呼び出されるany?) は反対の方法で動作します。これは false を想定し、述語の各適用はそれが true であることを証明しようとします。

言い換えれば、何もないものすべてに対して何かが真であることは常に真であり、何もないもののうちのいくつかに対して何かが真であることは常に偽です。

于 2012-11-08T10:45:08.700 に答える
8

関数は全称記号every?を実装します。

それから(every? string? []) => false、次のような[]オブジェクトが含まれます(これが全称記号の否定が機能する方法です)。これは矛盾につながるので、を返す必要があります。x(string? x) => false(every? string? [])true

于 2012-11-08T11:33:13.243 に答える
7

数学ではそう定義されており、それには正当な理由があります。every?他の方法で定義されていると、一貫性が失われます。

現在の定義では、連結されたevery? fooすべてのコレクションが も満たす場合にのみ、連結の結果が満たされevery? fooます。空のリストでreturnを行うと、この便利な等価性と他の多くの等価性every?が壊れます (たとえば、要素の削除は、からへfalseの切り替えにつながる場合があります)。every?truefalse

于 2012-11-08T12:25:22.343 に答える
0

それは、「and」および「or」操作の ID 値に帰着します。任意のブール B について、B が と同じ値を持つ場合ですB & T。したがって、値のない「and」は真でなければなりません。B | F同様に、が B と同じ値を持つことも真なので、値がない場合の「または」は偽です。

同様に、無項の積は 1 であり、無項の和は 0 であり、これらは乗算演算子と加算演算子の恒等値です。

于 2017-01-03T08:28:12.040 に答える
0

または、なぜ(every? string? [])yieldする必要があるのか​​ を尋ねたほうがよいfalseですか?両方のバリアントは、特定の要件で間違った答えにつながります。しかし、明らかに、空のシーケンスでエラーが発生するよりはましです。

于 2012-11-08T08:59:21.513 に答える
0

私の答えは空虚な真実です。
Wiki はそれをよくカバーしているので、現在の最初の段落を引用します。

数学と論理では、空虚な真理とは、空集合のすべてのメンバーが特定のプロパティを持っていることを主張するステートメントです。たとえば、「部屋のすべての携帯電話がオフになっている」というステートメントは、部屋に携帯電話がない場合はいつでも真になります。この場合、「部屋のすべての携帯電話の電源がオンになっている」というステートメントも、「部屋のすべての携帯電話の電源がオンになっていて、オフになっている」という 2 つの結合と同様に、空虚に真になります。

于 2017-01-01T23:28:54.323 に答える