by shigemk2

当面は技術的なことしか書かない

リスト遊び 6-1 二項演算

前回
リスト遊び 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)

リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)