【Lisp】Land of Lisp 2章
グローバル変数の定義
トップレベル変数(グローバルにて意義される変数)を定義するためにdefparameterを使う。 **はローカル変数と区別するためにつけておくと良い。
> (defparameter *small* 1) *SMALL*
同じ名前でトップレベル変数を定義すると上書きされる。
> (defparameter *small* 1) > *small* 1 > (defparameter *small* 2) > *small* 2
ただし、defvarを使うと上書きされない。
> (defvar *foo* 1) > *foo* 1 > (defvar *foo* 2) > *foo* 1
グローバル関数の定義
defunを使う。
(defun function_name (arguments) ...)
バイナリサーチ
;ゲームの初期化 (defun start-over () (defparameter *small* 1) (defparameter *big* 100) (guess-my-number)) ;数の推測 (defun guess-my-number() (ash (+ *small* *big*) -1)) ;想定している数値よりも大きい時のコマンド (defun bigger() (setf *small* (1+ (guess-my-number))) (guess-my-number)) ;想定している数値よりも小さい時のコマンド (defun smaller() (setf *big* (1- (guess-my-number))) (guess-my-number))
再帰をつかっていますね。
ローカル変数の定義
letを使う。
(let (変数定義) ...本体...)
letでは複数の変数を定義できる。その変数はletコマンドの本体内でだけ使える。
(let ((a 5) (b 6)) (+ a b))
ローカル関数の定義
fletを使う。
(flet ((関数名 (引数) …関数本体…)) …本体…)
(flet ((f (n) (+ n 10))) (f 5))
ローカル関数内で同じスコープのローカル関数名を使いたいときはlabelsを使う。
(labels ((a(n) (+ n 5)) (b (n) (+ (a n) 6))) (b 10))
参考
- 作者: M.D. Conrad Barski,川合史朗
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 1人 クリック: 18回
- この商品を含むブログ (19件) を見る