[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bep] learning lisp: defun
- To: bep@argv.org
- Subject: Re: [bep] learning lisp: defun
- From: Koichi INOUE <inoue@argv.org>
- Date: 03 Jun 2001 05:13:02 +0900
- Delivered-To: mailing list bep@argv.org
- Mailing-List: contact bep-help@argv.org; run by ezmlm
- Organization: Accessibility Research Group for the Visually Impaired(ARGV)
- User-Agent: T-gnus/6.15.4 (based on Oort Gnus v0.04) (revision 01) SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/21.0.103 (i386-windy-freebsd4.3) MULE/5.0 (SAKAKI)
井上です。
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