[xyzzy:03647] Re: 小ネタ還元
- Subject: [xyzzy:03647] Re: 小ネタ還元
- From: masahito henmi <henmi@xxxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
Hiroshi Saito <HiroshiSaito@xxxxxxx> さん、こんにちは。masahito です。
| ;このへんスッキリ書けないものですかね。do while みたいな。
| (if (string= (buffer-substring (point) (+ (point) (length str))) str)
| (delete-region (point) (+ (point) (length str))))
| (while (forward-line 1)
| (goto-bol)
| (if (string= (buffer-substring (point) (+ (point) (length str))) str)
| (delete-region (point) (+ (point) (length str))))
ためしてはないのですが、
(while
(progn
(if (string= (buffer-substring (point) (+ (point) (length str))) str)
(delete-region (point) (+ (point) (length str))))
(forward-line 1))
(goto-bol))
こうとか。
(progn (if 〜) (forward-line 1))
---------------- 最後の値が帰ってくるので、これがwhileの条件式に
なる。
方法2 ==========================
*scratch*で
(macroexpand '(while (null a) (print a)))
これを実行してみると
(block nil <---出口の名前はnil
(let nil
(lisp::*loop
(if (not (null a))
(return (progn)) <-- nilの名前に脱出
)
(tagbody (print a)) (psetq))))
となっています。
for (;;) {
なんちゃら
if (なんちゃら) break;
ほんちゃら
}
が
(block nil
(lisp::*loop
なんちゃら
(if なんちゃら (return 値))
ほんちゃら
)
)
まー、lisp::*loopを使うのは、あんましよろしくないと思います。
(while t
なんちゃら
(if なんちゃら (return 値))
ほんちゃら
)
とか、
あとlispディレクトリの下に cmu_loop.lってのがあります。
これがたぶん、途中抜け出し可能のloopなんですが・・・
使い方は、聞かないでください(笑)
あと古典的な方法として (prog を使って、中で (go するとか
------------------------------------------------------------
逸見雅人 Masahito Henmi henmi@xxxxxxxxxxxxx
♪あなたの願いも仕事もうまくいきますように・・・