From: 閑舎 <raku@...>
Subject: [TSabc:59] Re: 初心者向け言語の比較の参考に(Scheme の場合)
Date: Tue, 09 Apr 2002 14:46:32 +0900 (LMT)
Message-ID: <20020409144632R.raku@...>
> Scheme ってこういう書き方ができるとは便利ですね。Emacs Lisp だと、
>
> (let ((loop t) (total 0))
> (while loop
> (setq num (read-minibuffer ""))
> (if (= num 0)
> (progn (setq loop nil)
> (message (format "%f" total))
> (sleep-for 2))
> (setq total (+ total num))
> )))
>
> というような書き方しか思いつきません。
廣島です.
Scheme では終端再帰を正しく実装することを R5RS が要求しています.
Lisp は詳しくないのですけど,
___ Emacs Lisp が終端再帰を正しく実装しているならば,___
(defun compute-total (total)
(let ((num (read-minibuffer "")))
(if (= num 0)
total
(compute-total (+ total num)))))
(message (format "%f" (compute-total 0)))
も解です.
正しい終端再帰なら,スタックが積み重ならないので,
これで本当の繰り返しが実現できます.
また,Emacs Lisp でも Tcl と同じく Catch & Throw が使えますから,
(message (format "%f"
(catch 'break
(let ((total 0))
(while t
(let ((num (read-minibuffer "")))
(if (= num 0)
(throw 'break total)
(setq total (+ total num)))))))))
も,解です.
-----------------------------
廣島 勉
(tsutomu@...)