廣島です.
> 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@...)