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)
  ...)

とか。