#これはいかんでしょ。ところで全ての引数が定数であるtrivialな場合はこの展開をしても問題ないけどあまり意味がない。「全ての式が副作用を持たず、例外も出さない」ことがコンパイル時にわかれば有用そうだけど、CLでそれは可能かな? 型宣言によってdomain errorの可能性は排除できるとして。
#;; 例えばこんな場合
(defun foo (x y z)
(declare (double-float x y z))
(if (< x (sin y) z)
(do-this)
(do-that)))
#ああこれだとzが副作用無いこと明白なのでショートカット可能だな。
#SBCLでは実際ショートカットしてた。(< (sin x) (sin y) (sin z)) にしたらショートカット無し。このケースで(sin z)が例外上げることってあるかなと思ったがzが無限大の可能性があるのか。