[xyzzy:08723] 二重階乗 (calc.l)
- Subject: [xyzzy:08723] 二重階乗 (calc.l)
- From: Ta-ku-ya II <ayucat@xxxxxxxxxx>
- X-mailer: Mew version 3.2.50 on Emacs 20.7 / Mule 4.1 (AOI)
二重階乗の定義:
(-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/