参考
https://clojure.org/guides/repl/basic_usage
Clojure 公式の基本的な使い方のページの前半。
数値計算
clojure の四則演算の特徴
https://clojure.org/guides/repl/basic_usage#_evaluating_clojure_expressions
+, -, * , / の四則演算が Java や JS とは大きく異なる
足し算の例だと
( + 数値A 数値B 数値C 数値D ... )
の形で
((( 数値A + 数値B ) + 数値C ) + 数値 D ...)
という計算になる
https://alraku.com/calculation/2454/
先頭の引数を残りの引数で割った数値が返り値となります。
このような Lisp と同じ計算方法が使われる。
https://github.com/clojure/clojure/blob/clojure-1.10.1/src/clj/clojure/core.clj#L984
なお、JS などの算術演算子のように見えるが
ソースコードを見ると defn で定義されているように、
実態は可変長の引数をとる関数である
単体の数値出力
user=> (+ 1)
1
+
で加算計算することを宣言し
空白を開けて数値を渡す。
( + -4 )
-4
マイナスの数値を渡すこともできる。
( + )
0
加算、乗算なら数値は渡さなくてもエラーにならない
減算、割算はエラーになる。
エラーになる出力
( 1 )
数値のみではエラーになる。数値計算の宣言が必要。
( +1 )
足し算宣言と数値の間に空白が入っていないのでエラーになる。
加算 -- (((A+B)+C)+D)
( + 1 2 3)
6
数値を増やしていけば、全て加算してくれる。
しかし内部的には ( 1 + 2 ) + 3 ) = 6
になっている
減算 -- (((A-B)-C)-D)
( 1 - 2 ) - 3 をするために
( - 1 2 3)
-4
-1 -2 -3 = -6
になるかと思いきや
( 1 - 2 ) - 3 = -1 -3 = 4
になっている
( - 1 2)
-1
順番に計算していく
-1 -2 -3 をするために
( - -1 2 3 )
-6
最初の引数さえ -n にすれば全て減算できる
( - 1 - 2 )
Execution error (ClassCastException)
at user/eval5 (REPL:1).
マイナスと 1 の間を離すとエラーになる。
1-1+2-2 のような計算は一度にはできない。
掛け算 -- ( A x B ) x C )
( * 2 3 )
6
2 x 3 = 6
( * 2 3 3 )
18
( 2 x 3 ) x 3 ) = 18
になる。
割り算 -- ( A ÷ B ) ÷ C )
( / 2 3 )
2/3
2 ÷ 3 = 2/3
( / 2 3 3)
2/9
( A ÷ B ) ÷ C ) = 2/9
準に割る処理をしていく。
引き算と同じロジック。
Top comments (0)