はあなたが書くことができる:スキームでなぜですか:他にはいない(else)clojure? Clojureので
(cond (= 1 2) 1
:else 5)
を同等には、次のようになります。
(cond ((= 1 2) 1)
(else 5))
:else 5
構文は(else 5)
ほど一貫していません。 Clojureでこの一見矛盾した方法でelse構文が実装された理由は何ですか?
はあなたが書くことができる:スキームでなぜですか:他にはいない(else)clojure? Clojureので
(cond (= 1 2) 1
:else 5)
を同等には、次のようになります。
(cond ((= 1 2) 1)
(else 5))
:else 5
構文は(else 5)
ほど一貫していません。 Clojureでこの一見矛盾した方法でelse構文が実装された理由は何ですか?
私は(else 5)
があまり一貫していないと思います。 (cond ...)
引数は条件 - 値の組として記述されます。 :else
はちょうど慣習に過ぎないので、:else
は常に真であるため、は一貫しています。 :else
の特別なルールは全くありません。
多くの理由があります。主に私はcond
がif
の周りのマクロとして実装されているからだと思います。一方、スキームelse
は、この文脈ではt
の単なる同義語です。関数呼び出しではないので、なぜそれを1つのように見せますか?
'cond 'がマクロとして実装されているということはどうですか? –
マクロは関数とは構文が異なります。 –
:else
は、ここでは巧妙なトリックの実際のビットです:
cond
は条件/値のペアを期待 - と:他のClojureで「truthy」であるだけで値は、それがあることを保証されます条件を満たす。 (nullまたはfalse以外のものは "真"とカウントされます)。あなたが好きであれば、保証された真の条件値として ":ロバ"を同じように使うことができます。のどれもがそう実際にそれがcond
式で働くだけで、条約のない場合に実行する1つである人間の読者に意味を伝えます人間の読者には意味があります。
すてきな答えをありがとう。彼らはすべて価値を追加しました。 – steenhulthin