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