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

[xyzzy:03647] Re: 小ネタ還元



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
♪あなたの願いも仕事もうまくいきますように・・・

Index Home