作者: Tsutomu Hiroshima
日時: 2002/4/13(10:04)
廣島です.

> Scheme の場合の第5弾です.
> 
> ;;; 解5
> ;;; do を使った Scheme らしからぬ解
> (display
>  (do ((num (read) (read))
>       (total 0 (+ total num)))
>      ((zero? num) total)))
> ....
>
> 正しい終端再帰を実装している Lisp の version があれば解なのですけど...

この話題もそろそろ打ち止めか?
と思いつつ興味に任せて Common Lisp を Install しました.

Common Lisp も Scheme とは異なり,
正しい終端再帰を実装していませんでした.

で,Common Lisp の場合です.

;;; 解1
;;; do を使った場合
(print
 (do ((num (read) (read))
      (total 0 (+ total num)))
     ((zerop num) total)))

これは Scheme の do とほとんど同じです.

;;; 解2
;;; loop を使った場合
(print
 (let ((total 0))
   (loop
     (let ((num (read)))
       (when (zerop num) (return total))
       (setq total (+ total num))))))

これで,しばらく,Common Lisp で遊べます.

-----------------------------
	廣島 勉
	(tsutomu@...)