TL;DR
- Clojure の算術計算と、
Long、Double、Ratio、Stringなどの基本的な型を扱う。 defでグローバル変数を、letでローカル変数を定義する。.cljファイルはcljコマンドで実行できる。
内容
算術計算
/ に整数値を渡すと、Long か Ratio 型の値が返ってくる。
(/ 1 2) ;; 1/2
(/ 210 3) ;; 70浮動小数点数を渡すと、戻り値も浮動小数点数(Double)になる。
(/ 1 2.0) ;; 0.5
(/ 210 3) ;; 70.0商と余りを求めるには、quot と rem を使う。
(quot 14 5) ;; 2
(rem 14 5) ;; 4次の式を評価すると、N の付いた整数(BigInt)が返ってくる。
(* (/ 22 7) (* 7 7)) ;; 154Nただし、どれか 1 つを浮動小数点数にすると、戻り値も浮動小数点数になる。
(* (/ 22 7) (* 7 7.0)) ;; 154.0円周率や累乗など、数学に関する処理は Math ライブラリにまとまっている。
(* Math/PI (* 7 7)) ;; 153.93804002589985
(* Math/PI (Math/pow 7 2)) ;; 153.93804002589985数値型
Clojure の整数は Long 型である。型を確かめるには type を使う。
(type 147) ;; java.lang.Long浮動小数点数は Double 型である。
(type 147.56) ;; java.lang.Double
(type Math/PI) ;; java.lang.Double算術計算で出てきた 1/2 のような分数は、Ratio 型である。
(type (/ 1 2)) ;; clojure.lang.Ratiodouble を使うと、渡した整数を Double に変換できる。
(double 32) ;; 32.0
(type (double 32)) ;; java.lang.Doublelong を使うと、渡した浮動小数点数を Long に変換できる。
(long 147.56) ;; 147
(type (long 147.56)) ;; java.lang.Long文字列型
文字列は String 型である。
(type "Hello") ;; java.lang.Stringstr を使うと、文字列以外の値と結合できる。
(str "1 + 2 is " (+ 1 2)) ;; "1 + 2 is 3"count を使うと、文字数を取得できる。
(count "Hello") ;; 5Clojure は組み込みの String ライブラリを持っている。このライブラリには、reverse や upper-case といった便利な関数がある。
(clojure.string/reverse "Hello") ;; "olleH"(clojure.string/upper-case "Hello") ;; "HELLO"変数
def を使うと、プログラム中のどこでも使えるグローバル変数を定義できる。
(def my-name "Radish") ;; #'user/my-name(println "Hello " my-name)グローバル変数を使って、別のグローバル変数を定義することもできる。
(def greeting (str "Hello " my-name "!"))
(println greeting)あるコードブロック () の中だけで使うローカル変数を定義するには、let を使う。
(let [local-variable "something"]
(println local-variable))こうして定義した変数は (let …) の外側では使えない。
(println local-variable)
;; Syntax error compiling at (REPL:1:1).
;; Unable to resolve symbol: local-variable in this contextファイル内の Clojure を実行する
次のような .clj ファイルを作る。
;; hello_world.clj
(println "Hello World")保存して次のコマンドを実行すると、プログラムが動く。
$ clj hello_world.clj
> WARNING: Implicit use of clojure.main with options is deprecated, use -M
> Hello, Worldキーワード
自分の理解
Common Lisp と被っているところも多いので、知らなかったところだけピックアップした。