1

私はclo ju ureを初めて使用しています。<code>( 3 ) と だけの違いは何3ですか? そうした場合​(3)、次の例外が発生します。

java.lang.ClassCastException: java.lang.Long は clojure.lang.IFn にキャストできません。

4

4 に答える 4

11
  • 3文字通りの数字の 3 です。
  • (3)3は関数アプリケーションです。パラメータなしで関数を呼び出そうとしています。(そのような関数はなく、定義できないようです。)
  • '(3)は 1 つの項目のリストです3(list 3)関数適用である と同じです。

ここにreplセッションがあります:

repl=> 3
3
repl=> (3)
ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn  repl/eval1388 (NO_SOURCE_FILE:1)
repl=> '(3)
(3)
repl=> (list 3)
(3)
repl=> => (defn 3 [] 3)
ClassCastException java.lang.Long cannot be cast to clojure.lang.IObj  clojure.core/with-meta (core.clj:211)
于 2013-09-01T02:00:40.180 に答える
8

Lips では、括弧は関数の適用を意味するため、次のようになります。

(a b c d)

a引数に適用することを意味しますb c d

を適用しようとしていますが3、これは関数ではなく、関数に変換することもできません。

于 2013-08-31T21:06:00.620 に答える
6

Clojure では、括弧は関数適用を意味します。は、存在しない(3)という名前の関数を呼び出そうとしています。3

于 2013-08-31T21:05:35.327 に答える
3

Lisp を使い始めるときは、括弧が重要であるという事実に慣れる必要があります。演算子の優先順位を明確にするために括弧を追加することはできませんが、すべてがプレフィックス形式であるため、演算子のあいまいさはありません。

すべての括弧が重要であるという事実に慣れたら、精神的に冒頭を 1 つ右に動かしてみて(println "hello")くださいprintln("hello")

言語は非常に規則的であるため、(3)を と読む必要があることを意味し3()ます。3は関数ではないため、呼び出すことはできません。

于 2013-09-02T14:57:48.570 に答える