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

Re: [bep] learning lisp: defun



井上です。

Reiko TAKAHASHI <HFC03614@...> writes:

> } (defun n (n) (if (= n 1) 1 (* n (n (1- n)))))
> 
> の意味を教えてください。
> 
>  一応考えてみたのは、
> 
> (defun n (n) 
> 
>  これから作る関数の名前はnで、その中で使う引数はn。
> 
>  で、nがどういう関数かというと、
> 
> (if (= n 1) 1
> 
> もし、nが1だったら1。(???)
> 
> (* n (n (1- n)))))
> 
> それ以外だったら(?)、n と (n (1- n)) をかける。
> (n (1- n)) の意味は想像もつきません。

おっと、プログラム初心者に再起は結構つらいかも。。
# 坂本さんはがんばって!

部品を。
(n (a- n))
の最初のnは今まさに定義しようとしている関数n自身。
(1- n)
は「nから1を引いたもの」
# C-h f 1- RET
(if 条件 真のとき 偽のとき)
条件が真なら「真のとき」を実行。そうでなかったら「偽のとき」を実行。
ただし、lispのif文の特徴なのか、「真のとき」は一つの評価単位でなければな
らないので、複数の関数を続けて実行させたかったら(progn ..)なんかを使う。
(今は関係ない)
# C-h f if RET
# 便利でしょ?

-- 
                    Koichi Inoue, ARGV
                    E-Mail: inoue@...
                    ICQ UIN: 74900690