問題をLispで解く

  • ということで、Lispプログラムを書いてその数式をグラフ化してみたりした。
(defun factorial (n)
  (let ((i 1)
  (n-fac 1))
  (loop (if (> i n) (return n-fac))
  (setf n-fac (* i n-fac))
  (setf i (+ i 1)))))
(defun combination (n m)
  (/ (factorial n) (* (factorial (- n m)) (factorial m))))
(defun sigma (func low high)
  (defun sigma-iter (k sum)
    (if (> k high)
      sum
    (sigma-iter (+ k 1)(+ (funcall func k) sum))))
  (sigma-iter low 0))
(defun q (m n)
  (defun q-iter (k) (* (expt -1 (- m k)) (combination m k) (expt (/ k 12) n)))
  (sigma 'q-iter 1 m))

階乗が再帰でないのは、マシンスペック上の問題です。
再帰で書くと、これを書いた当時の私のノートPCのCygwinCommon Lispではスタックが溢れてしまうからなのでした。orz
あと少し漸化式を展開してます。

  • さて、お待ちかね。

m=12のときのグラフは下記。