[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bep] learning lisp: recursive
- To: bep@argv.org
- Subject: Re: [bep] learning lisp: recursive
- From: Reiko TAKAHASHI <HFC03614@nifty.ne.jp> (高橋玲子)
- Date: Tue, 05 Jun 2001 07:29:29 +0900
- Delivered-To: mailing list bep@argv.org
- Mailing-List: contact bep-help@argv.org; run by ezmlm
高橋です。
(defun n (n) (if (= n 1) 1 (* n (n (1- n)))))
について、
Reply Koichi INOUE <inoue@...>'s message:
} (n (a- n))
} の最初のnは今まさに定義しようとしている関数n自身。
} (1- n)
} は「nから1を引いたもの」
} # C-h f 1- RET
} (if 条件 真のとき 偽のとき)
} 条件が真なら「真のとき」を実行。そうでなかったら「偽のとき」を実行。
} ただし、lispのif文の特徴なのか、「真のとき」は一つの評価単位でなければな
} らないので、複数の関数を続けて実行させたかったら(progn ..)なんかを使う。
} (今は関係ない)
nと2をかけたものだと(2* n)って書いたりもできるんですか?
Reply TAKAHASHI Naoto <ntakahas@...>'s message:
} (defun fact (n)
} (if (= n 1)
} 1
} (* n (fact (- n 1)))))
(defun fact (n)
関数名は fact で、そこで使う引数はn。
(if (= n 1)
nが1だったら
1
1(って……なんでしょう……?)。
1っていう値を返してっていうことですか?
(* n (fact (- n 1)))))
そうでなければ、n と (fact (- n 1))をかける。
fact (- n 1) は……?
factって、その寸前というか、すぐ外(?)で定義してるんですよね? こんなこと
ができるなんて不思議というか、やっぱりわからないかも。
n が 1だったら、n=1なので 1?
n が 2だったら……。
(* 2 (fact (- 2 1))) ==> (* 2 fact(1))
で、fact(1) は……あちゃあ、わかんない〜(^_^;)。
()の中が1だから、n=1(???)だから、1……?
n が3 だったら……?
(* 3 (fact (- 3 1))) ==> (* 3 fact(2))
で、fact(2) は……
()の中が2だから、n=2……? だと、あちゃあ、またわかんない(^_^;)。
もう混乱の極みです! 1年後にはわかるようになっているといいな。
精進します(^.^)。
**-***-***-***-***-***-***-***-***-***-***-***-**
Reiko TAKAHASHI (高橋玲子)
E-mail: HFC03614@...
ICQ UIN: 85924121 (Twinkle)
**-***-***-***-***-***-***-***-***-***-***-***-**