COMMON LISP JP > Archives > 2013/01/13

2013/01/13 00:18:43 UTCshiro
#
これはいかんでしょ。ところで全ての引数が定数であるtrivialな場合はこの展開をしても問題ないけどあまり意味がない。「全ての式が副作用を持たず、例外も出さない」ことがコンパイル時にわかれば有用そうだけど、CLでそれは可能かな? 型宣言によってdomain errorの可能性は排除できるとして。
2013/01/13 00:24:38 UTCshiro
#
;; 例えばこんな場合
(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が無限大の可能性があるのか。