没アイデア

没になったアイデア。複雑すぎるだろう。

(defmacro def-s (var &key force-def-as-variable )
  `(flet ((my-func (x)
                   (format t "myfunc ~a~%" x)))
     (if ,force-def-as-variable
       (if (fboundp ,var)
         (error (format nil "var is already defined ~s" ,var))
         (setf (symbol-function ,var) #'my-func))
       (if (fboundp ',var)
         (error (format nil "var is already defined ~s" (quote ,var)))
         (setf (symbol-function (quote ,var)) #'my-func)))))

こうかくと

(def-s a)
; ともかけるし
(mapc (lambda (s) (def-s s :force-def-as-variable t)) '(a b c))
; でいっきに a b c もつくれる

がわれながらインタフェースがひどいので没。でよくよく考えると SICP に引きずられたからクロージャーを使ってしまったが、これだと def-signal するたびに”同じ構造"で違う関数が複製される。やりたいことはやはり make-signal なのでちょっと違う。struct を使ったほうが簡単にかける気がしてきた。def-signal をつくるなら呼ばれるたびに違う構造のものを生成しなければならないよね。