LISP Scheme

このエントリーをはてなブックマークに追加
508507
でも、評価順序の制御のためだけに、わざわざ一時変数を手書きで
挟むのも馬鹿らしいので、左から右(あるいは右から左)へ
評価される様に、let*やletrecを使ったマクロを定義して形式化
するのがいいかもしれません。

;左から右への評価順序を強制するマクロ。
(define-macro (ltor-args func . args)
 (let ((tmp (map (lambda (x) (gensym)) args)))
  `(let* ,(map (lambda (x y) (list x y)) tmp args)
   (,func ,@tmp) )))