Lispってやっぱり面白いかも

On Lispをコードを打ち込みつつ読み進めている。現在2章「関数」、クロージャのあたり。テスト期間だからあんまり読めないが、よくできた数学理論を眺めているような快感を感じる。Lispでプログラムを書くのが楽しいだろうこともすごく伝わってくる。何がいいかってやっぱりとにかく制限が少ないこと、特に抽象化がやりやすいことなんだろうなと思う。数学の世界を思わせるような自由度。歴史的にはもともと計算可能性の理論を記述する数学的表現のひとつであるラムダ算法をコンピューター上で実行できるようにしたものだからある意味当然なのかもしれないが。とりあえずは7章、Lispの抽象化能力の真髄(らしい)たるマクロまで早く行きたいところだ。

ついでに(ここはそんなにきれいじゃないが)今日の写経範囲(部分)

;簡易データベース関数
(defun make-dbms (db)            ;一つのデータベース(正式にはクロージャ)とそれに対する3つのデータベース操作関数を生成する関数
  (list
   #'(lambda (key)               ;検索
       (cdr (assoc key db)))
   #'(lambda (key val)           ;追加
       (push (cons key val) db)
       key)
   #'(lambda (key)               ;削除
       (setf db (delete key db :key #'car))
       key)))

(setq cities (make-dbms '((boston . us) (paris . france))))
(funcall (car cities) 'boston)
;--> US
(funcall (second cities) 'london 'england)
;--> LONDON
(funcall (car cities) 'london)

;---
(defun our-length (lst)         ;末尾再起にするために累積変数を使う例
  (labels ((rec (lst acc)
	     (if (null lst)
		 acc
	         (rec (cdr lst) (1+ acc)))))
    (rec lst 0)))