clojure備忘録[clojureの基本的な特殊形式 その5(do特殊形式)]
do特殊形式は、ある箇所で複数のS式を順に評価させたいけれども、
わざわざ関数を作るのは面倒くさい、という時に使用します。
do特殊形式は、内部に複数のS式を記述します。
最後に評価されたS式の値が、do特殊系式の返却値となります。
表記
(do & body)
「&」はそれ以降が可変長引数になることを意味しています。
要するに、このような記述が可能になるということです。
(do (def a (+ 1 2)) (if (= a 2) (println "a is 2.") (println "a is not 2.")) "Good bye.")
実例
例えばifの中でこのように使用することができます。
(defn pow [a b] (if (= b 0) (do (println "乗数が0です。問答無用で1を返却します。") 1) (do (println a "の" b "乗を返却します。") (apply * (repeat b a))) )) (pow 10 2) (pow 10 1) (pow 10 0)
ではreplに食わせてみましょう。
user=> (defn pow [a b] (if (= b 0) (do (println "乗数が0です。問答無用で1を返却します。") 1) (do (println a "の" b "乗を返却します。") (apply * (repeat b a))) )) #'user/pow user=> (pow 10 2) 10 の 2 乗を返却します。 100 user=> (pow 10 1) 10 の 1 乗を返却します。 10 user=> (pow 10 0) 乗数が0です。問答無用で1を返却します。 1 user=>
標準出力へメッセージが表示された後、
ちゃんと計算した結果がreplに返却されています。