[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bep] weather
- To: bep@argv.org
- Subject: Re: [bep] weather
- From: TAKAHASHI Naoto <ntakahas@m17n.org>
- Date: Wed, 23 May 2001 13:50:00 +0900 (JST)
- Delivered-To: mailing list bep@argv.org
- Mailing-List: contact bep-help@argv.org; run by ezmlm
- User-Agent: SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.2 Emacs/21.0.104 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)
n高橋です。すでに井上さんがほとんど答えてくれたようですね。話を簡単に
するため、以下では Lisp の専門用語は使わないで、一般的なプログラミング
の用語で説明します。
Reiko TAKAHASHI (高橋玲子)writes:
> Lispの解説をありがとうございます。
> ひとつ、わかりきったことだったのかもしれないけれど、とても大切なことに気
> づきました。
> Lispって、DOSのバッチファイルみたいに上(の左側)から順にコマンドを処理し
> ていくのではなくて、ちょうど算数の数式のように、括弧を見ながら、いちばん
> 深い(?)ところから順に処理していく……んですね??! だからこそ、「静かな
> 湖畔」状態になってしまうんだということに、今になって気づきました。
> 私が「順番が不思議」とこだわっていたのも、括弧の役割が全然解っていなかっ
> たからなんです。
> もし、同じ深さの括弧がいくつも出てくる場合には、上(の左)から順に処理さ
> れていくと考えていいですか?
井上さんも書いていましたが、処理は上の左側から進みます。と言うか、進め
ようとします。で、進むために別の関数が必要になったら、とりあえず今まで
やったことを置いておいて、先にその必要となった関数を実行します。結果が
得られたら、その結果を利用して先ほど中断した関数の処理を再開します。
(+ 1 (* 2 3)) の例だとこうなります。
1. 左かっこに続いて+があるので、これから足し算を実行するということがわ
かる。
2. 次に1があるので、足すべきものの一つめが1だとわかる。
3. 次に (* 2 3) があるので、1に足すべきものは (* 2 3) の結果だというこ
とがわかる。
4. 「1に何かを足」す、という部分はひとまず置いておいて、先に (* 2 3)
を実行する。
5. (* 2 3) を実行すると6という値が得られる。
6. これで足すべきものは6だということがわかるので、元に戻って1と6を足し、
答の7を結果として返す。
というわけです。
一見、一番深いところからやっているのと同じように思えますが、そうでない
例もあります。setq のように変数に値を代入したりすると順番が問題になっ
てくることがあります。ちょっとややこしくなるので例は省略します。
> } これに and と関係代名詞節の範囲がはっきりするよう括弧を付けると
> }
> } INSERT the result of
> } (
> } the FORMAT function whose arguments are
> } "お天気: %s"
> } and
> } (the result of the WEATHER-FROM-HTTP function
> } whose argument is "東京地方".)
> } )
> 元のLispでは、"the result of the WEATHER-FROM-HTTP function ..."の部分
> をいちばん初めにしなければならないので、そこに括弧が付いていると考えてい
> いですか?
> (insert
> (format "お天気: %s"
> (weather-from-http "東京地方")))
上でも書いたように、実行は上の左からやろうとします。
1. (insert -- よしよし、挿入命令だな。次に来るものを挿入してやろう。
2. (format -- なんだ、別の関数か。それじゃあまずこいつを実行しなきゃ。
3. "お天気: %s" -- 「お天気: 」の後に、この次のものを代入するんだな。
4. (weather-from-http -- げ、また関数かよ。3の代入は一旦中断だ。
5. "東京地方" -- よし、これを引数として weather-from-http を実行だ。
6. なになに、実行結果は「雨でおじゃる」か。ではこれが4の結果だ。
7. つーことは3の %s には "雨でおじゃる" を入れればいいってことだ。
8. となると2の format の結果は "お天気: 雨でおじゃる" だな。
9. やっと1に戻ってきた。つまり "お天気: 雨でおじゃる" を挿入するわけね。
--
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/