/var/log/messages

Nov 10, 2013 - 1 minute read - Comments - EoPL Scheme

EoPL の Exercise 2.15

考えかたてきには

  • stack は手続きオブジェクト
  • push で extend すれば良い
    • extend は stack を戻すはずなので戻るのは手続きオブジェクト
    • 引数に ‘pop あるいは ‘push なシンボルをもらうのかな

んーと、empty かどうかを判断するのが難しい。つうか SICP 方式になってしまったので中止。

(define make-stack
  (lambda (value stack)
    (lambda (sym)
      (cond ((eqv? sym 'push) (cons value stack))
        ((eqv? sym 'pop) stack)
        ((eqv? sym 'top) value)))))

(define pop
  (lambda (stack)
    (stack 'pop)))

(define push
  (lambda (stack)
    (stack 'push)))

(define top
  (lambda (stack)
    (stack 'top)))

もっかい最初から。空の stack は apply されたら eval されて empty? って聞かれた時にどうすりゃ良いのか、って事か。つうかやっぱ push はコンストラクタとしての extend-stack だけれど、それが戻す手続きは ‘pop 又は ‘extend? という引数を取らざるを得ないかな。

で、色々整理しつつ以下がでっち上がりました。Gist にして貼ってみます。

{% gist 7395014 %}