Shammer's Philosophy

My private adversaria

結局引数で渡すしかないのか?

特定関数呼出中のみの予約語を定義する - Shammerismでやった試みは失敗。let で宣言された変数に、外部ファイルで定義した関数からアクセスしたい、という方法として有効と思ったのだが。やっぱりありきたりだが、こういう場合は関数の引数を予め約束する形にしないとダメなのだろうか。いわば、Java の doGet や doPost が HttpRequest や HttpResponse を引数として持つ、と定義する方法。これだとうまくいくが。。。

(defun a (xxx yyy zzz)
  (format t "~A ~A ~A~%" xxx yyy zzz))

というように定義しておき、呼出側で以下のようにする。

(load "/tmp/test1.lisp")
(let ((xxx 10)
      (yyy 20)
      (zzz 30))
  (a xxx yyy zzz))
(quit)

だが、これも問題だ。doGet や doPost のように、呼び出す関数名まで決めておかないと、呼出す側から呼び出してほしい関数へアクセスできなくなってしまう。でも、doGet のように名前を決めておくとなると、呼び出してほしい関数を書く側はその名前にしないといけない。定義が一つならいい。複数になると、、、それこそ Java のように、Class の雛形まで定義して、非常に多くの Class を定義しなければならなくなるだろう。うーむ。。。どうしたものか。標準関数だけで一連の処理が完了するようにしたいのだが。