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

Re: [bep] weather



 高橋玲子@ちょっと長いです。

 Lispの解説をありがとうございます。
ひとつ、わかりきったことだったのかもしれないけれど、とても大切なことに気
づきました。
Lispって、DOSのバッチファイルみたいに上(の左側)から順にコマンドを処理し
ていくのではなくて、ちょうど算数の数式のように、括弧を見ながら、いちばん
深い(?)ところから順に処理していく……んですね??! だからこそ、「静かな
湖畔」状態になってしまうんだということに、今になって気づきました。
私が「順番が不思議」とこだわっていたのも、括弧の役割が全然解っていなかっ
たからなんです。
もし、同じ深さの括弧がいくつも出てくる場合には、上(の左)から順に処理さ
れていくと考えていいですか?


Reply Mitsugu SAKAMOTO <mitsugu@...>'s message:

} > } 		      (save-excursion
} > 
} >  今日は雨でも、明日は晴れるかもしれないので、遠足は明日までとっておこう
} > ……じゃなくて、わかりません。
} 
} 後で戻ってこれるように現在位置を保存して。

 でもでも、これってメールを送ってしまう直前(もう後戻りはできない状態)
でお天気を入れることになっていますよね? なぜ現在位置を保存しなければな
らないのでしょう……?

} > せたりとか細かいこと)が苦手です。だから爆発させちゃうと思う。
} 
} M-x load-file
} してelispのファイルを読み込んだら「かーん」って言われます。

 ちゃんとエラーチェックしてくれるんだということですね? 「かーん」だけ
じゃなくて、どこがおかしいのかを教えてもらえる方法ってありますか?


Reply TAKAHASHI Naoto <ntakahas@...>'s message:

} これに 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 "東京地方")))

} なにしろ Lisp は lots of insane stupid parentheses の略だという話もあ
} るくらいですから。

 ……そう言いたくなる気持ち、すでにわかる気がします。
いろいろな種類の括弧があったらもう少し楽そうなのに……。

} あと、Lisp の歌というのもありました。「静かな湖畔の森のかげから」で始
} まるやつです。なんでこれが Lisp の歌なのかは、最後まで歌ってみるとわか
} ります。

 輪唱で歌うと、さらにリアル!?


Reply Mitsugu SAKAMOTO <mitsugu@...>'s message:

} > }   (interactive)
} > 
} >  これは全然わかりません。井上さんの説明から推測すると、「カーソル位置に」
} > の部分でしょうか?
} 
} weather-insert-hereという引数の無い関数を作るのですが、interactivな関数
} (ユーザがM-x hogehogeとかで実行できるように)な関数を定義します。

 "interactive"の意味をすなおに考えればよかったんですね。


Reply Koichi INOUE <inoue@...>'s message:

} まず、基礎知識として、
} lispでは
} (コマンド オプション)
} (コマンド オプション1 オプション2)
} のような書き方をします。このとき、改行は関係ありません。ですから、今回
} 簡単っぽい例でいうと、
} (+ 1 (* 2 3 ))
} はいわゆる算数の1+2*3と同じです。

 ↑の「コマンド」は+や*(足しましょうとか、かけましょうとか)で、「オプ
ション」が数字、ということですね。

} フックといって、プログラムが特定の状況になったときにユーザが設定して使
} えるようなポイントがいくつか用意されていて、その内の「Mewがメッセージ
} を送信前に最終整形する前」で呼ばれるフックに設定を追加しています。
} 本当はもっと別の、たとえばsignatureを挿入したときとかがあるとよかった
} のですが見あたらなかったので。

 そういうフックが「見あたる」場所ってどこなんですか?(どこへ探しに行っ
てきたの?……)

} > } 			(insert
} > } 			 (format "お天気: %s"
} > } 				 (weather-from-http "東京地方")))
} > 
} >  おかださんが作ってくださった"weather-from-http"というコマンドを実行して、
} > 「東京地方」のお天気を取得して、「お天気: 晴」とか「お天気: 曇後雨」とか、
} > そういう文字列にして、insertしてねっていうこと……?
} 
} ここはN高橋さんのかっこいい説明の通り。

 ここなんですが、実際にやってみたら、%sって、お天気本体だけじゃなくて、
.emacsで設定した、ヘッダに入る文字列全体を刺しているみたいです(「お天気
: 今日の東京地方は雨でおじゃる」みたいになります)。
%sって、引用のし方を指定するところでも、いろいろな文字列の代わりに使いま
すよね。みんな同じ%sで、どうしてぐちゃぐちゃにならないんでしょう?

} さて、今もう一度眺めるとどうでしょう??

 括弧の意味がわかった瞬間、すごい目から鱗でした。
でも、なにをどういう順番で書くのか、判断するのは難しそうですね。
コマンドが最初に来て、その後にオプション、というのが、実感としてつかめて
くると、もう少し解るようになるでしょうか。
今度は、以前作ってくださった"unfold-region"コマンド(でしたっけ?)を見て
みようかなと思うのですが、難しいですか?

 # Mewの声が代わるバージョン入れてみました。マークがあることに一瞬で気づ
けるので、便利に使えそうです。
Dマークに飛ぶのも、ちゃんとできました。この二つの機能があるだけで、私にと
っては大分使いやすくなる気がします。


**-***-***-***-***-***-***-***-***-***-***-***-**
           Reiko TAKAHASHI  (高橋玲子)
         E-mail:  HFC03614@...
         ICQ UIN: 85924121  (Twinkle)
**-***-***-***-***-***-***-***-***-***-***-***-**