[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
learning lisp: indentation, cond
- To: bep@argv.org
- Subject: learning lisp: indentation, cond
- From: TAKAHASHI Naoto <ntakahas@m17n.org>
- Date: Fri, 22 Jun 2001 11:27:52 +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高橋です。
Reiko TAKAHASHI (高橋玲子)writes:
> } す。defun の直前の開き括弧の上にカーソルを置いて M-q とすると自動的に
> } インデントされますが、それが Emacs のおすすめ indentation です。
後で訂正を出しましたが、M-q じゃなくて C-M-q でした。コントロールとメ
タとQを同時に押します。あるいはエスケープを打ってからC-q です。
> うわっ、これ便利ですね! Emacsって賢い……。
> 自分で書いているときは、その都度インデントするとわかりやすいのですが、途
> 中でぐちゃぐちゃになってきたりもしそうなので、「おすすめ」があると安心で
> す。
単に Tab を1回打つと、その1行が「おすすめ」の位置に調整されます。また
バッファが Emacs-Lisp mode のときに C-j とすると、改行してから tab を
打ったのと同じ効果があります。~/.emacs や xxx.el というファイルを編集
しているときは自動的に Emacs-Lisp mode になります。
一方、*scratch* バッファは Emacs-Lisp mode ではなくて、Lisp
Interaction mode です。この場合 C-j は直前のS式を評価してその結果をバッ
ファ内に挿入します。ちょっとややこしいのですが、Emacs-Lisp mode は
Lisp のプログラムを作成するモードで、Lisp Interaction mode はその名の
通り Emacs と Lisp で対話するモードだと思って下さい。
一時的な関数を *scratch* 内で直接作成することもよくありますし、それは
全然悪いことじゃありません。ただその場合、「改行 + tab」のつもりで C-j
とやってしまって意図せずにS式を評価させてしまうというミスが発生しやす
いので、そうなってもあわてないようにして下さい。
> わかりました! (cond ...)の条件には、「例外」といっても、「〜〜じゃな
> かったら」という形だけではなくて、「〜〜だったら」という特別な場合(だか
> らやっぱり例外)が入れられるんですね。あたりまえのことで、表面的にはわか
> っていたはずなのですが、ちゃんと飲み込めていませんでした。
cond の「条件」は本来「〜だったら」の意味です。ただ、現実にプログラム
を書いていると、まず例外的事象を取り出してしまった方が都合のよい場合が
多いというだけのことです。
> 今回考えてしまったのは、
> ((= n 1) 'spring)
> ((= n 2) 'summer) ...
> の部分でした。これは、「文字列」ではなくて、「シンボル」を返していますよ
> ね。
> こういうときは、文字列よりシンボルを使うのが普通なのでしょうか?
この関数の評価結果を見るのは人間ですので、今のところはシンボルでも文字
列でも好みの方でかまいません。もし他の関数がこの season を呼び出してそ
の評価結果を利用するようなことがあるならば、その呼び出す方の関数に合わ
せる必要が出てきます。
--
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/