«前の日記(2005.05.04 / Wednesday) 最新 次の日記(2005.05.06 / Friday)» 編集

Hena Hena Nikki

2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|10|11|12|
2012|01|02|03|04|05|06|07|08|10|12|
2013|01|02|04|06|

2005.05.05 / Thursday [長年日記]

* [computer] 再帰のお勉強をやってみる (階乗・組み合わせ)

かなり前にメモした web site だけど、けっきょく読んでない。 そんなわけで、実際に elisp で書きながら少しずつ読み進めていくことにした。 …暇人とか言わんといて下さい。 ;(

とりあえず階乗の再帰関数版。

(defun ys:factorial1 (first number)
  (if (> number 0)
      (* (ys:factorial1 first (1- number)) number)
    first))

通常のループ版。 説明用でなければ普通こちらを書くだろうな。

(defun ys:factorial2 (first number)
  (let ((value first) (num 1))
    (while (<= num number)
      (setq value (* value num))
      (setq num (1+ num)))
    value))

次は組み合わせの再帰関数版。 web page に書かれている 20, 8 を代入すると、一瞬、Meadow が止まります。

(defun ys:combination1 (m n)
  (if (and (> m n) (> n 0))
      (+ (ys:combination1 (1- m) (1- n))
         (ys:combination1 (1- m) n))
    1))

通常のループ版。 素直に書くとこうなる? 分子と分母が大きくなりすぎて、すぐに使えなくなってしまう。 それとミスがあるので後で修正しなくっちゃ。←済み。

(defun ys:combination2 (m n)
  (if (and (> m n) (> n 0))
      (let ((denominator 1) (numerator 1) (num 1))
        (setq m (1+ m))
        (while (<= num n)
          (setq denominator (* denominator (- m num))
                numerator (* numerator num))
          (setq num (1+ num)))
        (/ denominator numerator))
    1))

もう一つ、通常のループ版。 この中ではこれが一番まとも。

(defun ys:combination3 (m n)
  (let ((value 1) (num 1))
    (when (and (> m n) (> n 0))
      (setq m (1+ m))
      (while (<= num n)
        (setq value (/ (* value (- m num)) num))
        (setq num (1+ num))))
    value))

とりあえず今日はここまで。

四則演算は elisp のテキスト処理関数を使って書くことにしよう。

elisp じゃなくて Ruby で書いた方が良かったかも。 最近は全く使ってないので、こういった機会に触れないと忘れちゃう。

なんて思ったけど、elisp も似た様なものなので、とりあえずこのまま進めよう。

後で気付いたんだけど、interactive なんて使う必要ないですね。 というわけで修正。 ;(

* [cd/dvd] 電気グルーヴとかスチャダラパー / 電気グルーヴ×スチャダラパー

6/29 発売予定の作品。 1990 年代に大活躍した大物 2 組だけに、かなり興味深い。

* [computer] Re: 第 167 回 自然言語処理研究会

翌日の 5/28, gony さんや bg66 さんとお会いできる? 楽しみですよ。 :D


  • この日記には本日 名の方が訪問してくださっているようです。 また、昨日は 名の方が訪問してくださったようです。
  • この日記の更新情報の取得には antenna.lirs を利用するのがおすすめです。