[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bep] learning lisp
- To: bep@argv.org
- Subject: Re: [bep] learning lisp
- From: TAKAHASHI Naoto <ntakahas@m17n.org>
- Date: Tue, 29 May 2001 10:12:44 +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:
> ……たとえば……、もし、
> (setq x (save-excursion (goto-char (point-max)) (goto-char 3)))
> (なんて書き方はできないかもしれませんが)みたいにしたとしたら、'x'の値は
> 3、というか、保存されるカーソルの位置は3文字目になる……というようなこと
> でしょうか?
上のような書き方はできますし、そうすればxには3が入ります。
しかしどうやらまだ、
・S式を評価した結果として返される値
(今までの言い方だと「関数を実行したときの値」)
と、
・S式を評価したときに生じる副作用
を混同なさっているようです。
関数には、
1. 主に評価結果を利用するもの
2. 主に副作用を利用するもの
3. 両方とも利用するもの
の3種類があります。で、goto-char は2の「主に副作用を利用するもの」に分
類されます。たとえば (goto-char 3) を評価すると、結果として3が返され、
副作用としてカーソルの位置が3文字目に移動します。が、goto-char は大抵
の場合カーソルを移動させるために使われるわけですから、評価結果の3とい
う値は単に捨てられることが多いようです。このように、カーソル移動やバッ
ファ切り替え、ファイルの読み書きなどのために使われる関数は、副作用を利
用するものが大半です。
1の「主に評価結果を利用するもの」の代表は算術演算でしょう。+ とか - で
す。これらの関数を評価しても副作用は生じません。(setq x (* 5 6)) とす
れば (* 5 6) の評価結果である 30 がxに束縛 (今までの言い方なら「代入」
あるいは「セット」) されます。
その setq は主に副作用を利用するために用いられます。なぜなら変数に値を
束縛するというのも副作用の一つだからです。また setq は評価結果として束
縛された値を返します。ですから (setq y (setq x 30)) とすると、x と y
の両方に30が束縛されます。if や while の条件判定部分で setq の返り値を
利用する場合があります。
--
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/