categoryLISP覚書

LISPの再帰関数の例

trackback0  comment0
プログラミング覚書 001
LISPの再帰関数の例
----------------------------------------------------------------------

;x の n 乗
(defun beki (x n)
(cond ((zerop n) 1)
(t (* x (beki x (1- n))))))
使用例
(beki 2 3)

----------------------------------------------------------------------

読み下し

関数bekiを(x n)を引数にして定義する
  場合分け
    nが0ならば(0になれば)、1を関数値として返す
    それ以外(nが0でなければ)、
      nから1を減じてbekiを再帰的に呼び出し、
      戻り値にxを掛けたものを関数値として返す
      
nは再帰の呼び出し毎に1減ぜられ、n回の呼び出しで0となり、
再帰の戻り毎に(n回)、xが掛けられることになる。

ループを使った別解を以下に示す。(読み下しは省略)

----------------------------------------------------------------------

;別解
(defun beki1 (x n)
(prog (ans)
(setq ans 1)
loop
(cond ((zerop n) (return ans)))
(setq ans (* ans x))
(setq n (1- n))
(go loop)))

----------------------------------------------------------------------
関連記事
 









        
 
http://greenwind888.blog.fc2.com/tb.php/29-d0448724