さかもとのブログ

つらつらと

SICP演習問題5.9

;; exercise 5.9
(define (make-operation-exp exp machine labels operations)
  (let ((operation (lookup-primitive (operation-exp-op exp)
                                     operations))
        (aprocs
         (map (lambda (e)
                (if (not (label-exp? e))
                    (make-primitive-exp e machine labels)
                    (error "Don't apply label to operation -- ASSEMBLE" e)))
              (operation-exp-operands exp))))
    (lambda ()
      (apply operation (map (lambda (p) (p)) aprocs)))
    ))

(define hoge-machine
  (make-machine
   '()
   (list (list '= =))
   '(start
     (test (op =) (label start) (label start)))))
;gosh> *** ERROR: Don't apply label to operation -- ASSEMBLE (label start)