Land Of Lisp 第2章 (その1)
第2章からプログラムの説明に入っていきます。
数当てゲームを作りながら、Lispの説明がされています。
内容は、自分が考えた数をコンピューターが予想するもので、バイナリサーチでの実装です。
以下、この章で説明されている用語のメモ書きです。
REPL:real-eval-printループ(Loop) CLISPを起動後の入力待ちの状態
xyzzyも同様に起動すると即、Lispのコマンドなど入力できる(第1章に説明があったのですが、飛ばしてしまいました)
入力例です。(ブラウザの戻る機能でここに戻れます)
defparameter:トップレベル定義を作成する
例. *small* に「1」を設定。REPLは入力した式の値を返すようで、xyzzyでは小文字のまま表示される。本では大文字。(defparameter *small* 1) *small* *small* 1
ここで、*xx*は耳当てと呼ばれるらしい。Lisperと付き合うには必須
トップレベル定義:グローバルで定義される変数
グローバル変数は、ダイナミック変数、スペシャル変数とも呼ばれる。defvar:グローバル変数を定義。上書きはされない。
例.(defvar *small* 2) *small* *small* 1
これはどのような使い道があるのだろうか?
ネットで調べると「実用Common Lisp」のGoogleブック検索でちょっと中身が見れて、
defvarは初期値の設定、defparameterは値の変更のように書いてある。とりあえず、
今はこの程度の理解にしておく。(後でしっかり理解できるようになるかも)
defun:グローバル関数の定義
例.引数なしの場合(defun guess-my-number () (ash (+ *small* *big*) -1)) guess-my-number
(xyzzyは「)」を入力すると自動で対応する「(」を示してくれたり、インデントも自動で便利)
ash:算術シフト関数
いわゆるビットシフトで上記例では、右に1つシフト、つまり半分にして、小数部を切り捨てする。
ちなみにLispの整数に上限はないらしい。
さらにさらに、Lispは分数計算ができるらしい。
(+ 1/2 1/3) 5/6
setf:変数に値を代入
Common Lispでは、配列にも代入できるようです。ここまで、グローバルの定義でした。
おまけ
1+:1を足せ関数
引数に1を足す1-:1を引け関数
引数から1を引く例.
(1+ 3) 4 (1- 3) 2