前回
リスト遊び 5-6 eq と equal - by shigemk2
拡張しやすいプログラムはよく抽象化されているという。
この章では、補助関数と、「呼び出す関数を実行時に決定する方法」を
使い、Lispの関数を抽象化する技法を学ぶ。
そして、二項演算の式で、関数を抽象化する過程を眺めていく。
二項演算の式のサンプル
(calc '((1 + 2) - (3 * 4)))
=> -9
こんなのを実行出来る関数を作成する。
(defun calc (exp) (cond ((atom exp) exp) ((eq (car (cdr exp)) '+) (+ (calc (car exp)) (calc (car (cdr (cdr exp)))))) ((eq (car (cdr exp)) '-) (- (calc (car exp)) (calc (car (cdr (cdr exp)))))) ((eq (car (cdr exp)) '*) (* (calc (car exp)) (calc (car (cdr (cdr exp)))))))) calc (calc '(1 + (2 * 3))) 7
こいつを利用して、抽象化をどんどんやっていくぜ。
リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)
- 作者: 山本和彦
- 出版社/メーカー: アスキー
- 発売日: 2000/05
- メディア: 単行本
- 購入: 2人 クリック: 76回
- この商品を含むブログ (44件) を見る