xyzzy Lispの勉強

Lispの勉強

ツール:xyzzy(Windowsのエディタ)
使い方:xyzzyを起動すると *scratch*というモードで立ち上がる。
    コードを書いたら、行末でCtrl-Jして実行する。
参考:http://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp01.html


Hello Worldと出力する。

(format t "Hello, World\n")

要素を並べて括弧で括ってリストを作る。
要素はシンボルとデータに分けられる。

シンボルに数値を代入する。

(setf hoge 100)
または
(setq hoge 100)

リストを順番に実行することを"評価する"という。

シンボルやリストに引用符'を付けると評価を行わない。


リストの分解
first
car リストの先頭の要素を取り出す
rest
cdr リストの先頭の要素を含まない部分を取り出す

リストの合成
cons リストの先頭にデータを付け加える
list 引数のアトムからリストを作成する
append 引数のリストを結合する

16進は #x1234、8進は #o5678

分数を浮動小数点にするには float関数を使う

1+、1- はそれぞれ引数を1加減する
infc, decfはそれぞれ引数を1加減する

関数の定義
(defun 関数名 (仮引数) (処理) ・・・)

関数の内部で有効な変数はレキシカル変数(lexical variable)という。
ずっと有効な変数をスペシャル変数(special variable)という。
let を使うとレキシカル変数を定義できる。

比較にはeq, eql, equal, equalpがある。eqはアドレスで、equalpは型違いでも比較できる。

データ型を比較する述語:atom, numberp, integerp, floatp, symbolp, stringp, listp, consp
型指定子:number, integer, float, symbol, string, list, cons
型を調べる:typep述語、type-of関数
述語を組み合わせる: and, or
条件分岐:(if 条件部 then節 else節)
条件分岐:(cond (条件部A S式A1 S式A2 …) … (t S式T1 S式T2))
条件分岐:unless, when
繰り返し:(dotimes (var limit result) S式 …)
繰り返し:(dolist (var init result) S式 …)
繰り返し:(while 条件部 S式 …)
繰り返し:(loop 条件部 S式 …)、returnでloopを抜ける
繰り返し:(do (初期条件部) (終了条件部) S式 …)