Lisp

Lisp勉強中(7) 再帰

再帰。とりあえず、再帰の勉強でよく出てくる関数を書いてみた。引数で渡された数の階乗を計算する関数。 (defun fact (n) (if (= n 1) 1 (* n (fact (- n 1))))) (fact 10) =>3628800 引数で渡された数から0までの合計を計算する関数。階乗とほとんど同じ。…

Lisp勉強中(6) 分岐

最近仕事が終わるのが22時とか23時とかであんまり勉強が進まない。とはいえ今日は大事そうなところを覚えた。まあでも初期段階に覚えることって、大抵は大事なことだよね、言うまでもなく。 if 前回覚えた比較を使って分岐ができる。 (setq a 1) (if (= a 1)…

Lisp勉強中(5) 比較

やっとプログラムらしくなってくるのを覚えた。 trueかfalseかを調べる これはよく使う。まずはequal関数。引数が同じ値かどうかを調べる。 ; 一致するときは t が返る (setq a 1) =>1 (setq b 1) =>1 (equal a b) =>t ; 一致しないときは nil が返る (setq …

Lisp勉強中(4) CARとCDR

たとえば(1 2 3)っていうリストがあったとすると、最初の要素は「1」という値と「次の要素はこちらですよ」という情報を持つ。で、2番目の要素は「2」という値と「次の要素はこちらですよ」という情報を持つ。そして3番目の要素は「3」という値と「ここで終…

Lisp勉強中(3) 評価しないリスト

Lispは、()の中にスペース区切りで要素を並べて書くのが基本。そうした書いたものをリストと呼ぶ。で、リストの最初の要素が関数名、2番目以降の要素を引数として関数を呼び出し、結果を得る。つまり普通にリストを書くと、最初の要素が関数名と見なされて評…

Lisp勉強中(2) 変数と関数とシンボル

まずはこの辺を覚えなきゃね。 変数 (set 'a 1) (setq a 1) (setf a 1) これはみんな同じ意味っぽい。もっと別な使い方をするときは違いが出てくるらしいけど。aっていう変数に1を代入している。だからaって打つと1が返る。 a =>1 関数 関数を定義するのはde…

Lisp勉強中(1) xyzzyでLispを勉強

Meadowのマクロを自作したりするために、Lispを勉強したい。ホントはいきなりEmacs Lispをやればいいのかも知れないけど、ちゃんと本流(?)を知っておこうということで、まずCommon Lispを勉強することにする。Common Lispがわかるようになれば、今後Emacs Li…