inline #3 どう展開すりゃいいんだ?
(let ((arg1 value1) (arg2 value2) ...) <body>)
機械的に展開できるのはここまでで、これ以上は手動で定義してやらにゃならんような。
理想としては
;;; 関数定義 (defun ev-oddp (obj) (oddp (example-value obj))) ;;; 関数呼び出し (ev-oddp X) ;;; たぶん最も好ましそうな展開 (oddp (example-value X))
というのは妄想できるんだけど、関数の引数は左から順に1度ずつだけ評価されるってルールがあるんで、それを守ろうとすると
;;; こんな定義の関数を (defun mysterious-order (a b c) (list c b a)) ;;; こう呼び出すコードは (mysterious-order (foo) (bar) (baz)) ;;; こう展開してはいけない (list (baz) (bar) (foo))
とか
;;; こんな定義の関数だと (defun unknown-times (x) (loop x ...)) ;;; こう呼び出すコードを (unknown-times (foo bar baz)) ;;; こう展開すると(ひょっとしたら)タイヘンなことに (loop (foo bar baz) ...)
とか。