[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:08723] 二重階乗 (calc.l)



二重階乗の定義:
	(-1)!! = 0!! = 1
	n!! = n * (n - 2) * (n - 4) * ... * 4 * 2 (nが偶数)
	n!! = n * (n - 2) * (n - 4) * ... * 3 * 1 (nが奇数)
を calc::fact を真似て

(defun calc::dfact (n)
  (check-type n integer)
  (when (and (minusp n) (/= n -1))
    (error 'range-error :datum n))
  (do* ((i (mod n 2) (+ i 2))
	(r 1 (* i r)))
      ((>= i n) r)))
;; n = -1 のときも勝手に、1 という結果が戻るのですが、何も考えてません。

と書いてみました。

 これまで、

$ 5!!

とすると、(5!)! = 120! と解釈されて、とんでもない数字になってしまいま
したが、これを 5 !! と解釈させる方法が分かりませんでした。

 どのようにしたらいいでしょうか?


-- 
Ta-ku-ya II <ayucat@xxxxxxxxxx>
            http://esprix.net/~takuya2/

Index Home