JavaScript 1.7のGeneratorの例をクロージャで
2007-01-09


ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
[URL]
JavaScript 1.7
で、「Generatorは、Lispだと遅延評価の無限リストでやるでしょうね」など
と書いたけど、こんな例なら、そんな大げさなことしなくていいですよね。
 クロージャだけですませてみると。

--- ここから ---
(defun make-fib-gen ()
  "Fibonacci number generator."
    (let ((i 0) (j 1) (temp 0))
    #'(lambda ()
        ;(format t "i = ~A, j = ~A~%" i j)
        (setf temp i) (setf i j) (incf j temp) i)))

(let ((fib-gen (make-fib-gen)))
  (print (funcall fib-gen)) ; ==> 1
  (print (funcall fib-gen)) ; ==> 1
  (print (funcall fib-gen)) ; ==> 2
  (print (funcall fib-gen)) ; ==> 3
  )
--- ここまで ---

 なんか、インデントがなくなって、読みにくくなったのね。^^;
 それで、このエントリだけHTMLで書き直したけど、色が赤になって、やっぱ、みにくいね。
 ウェブの
[URL]
の2007/01/09のほうをみてください。


コメント(全2件)
コメントをする


記事を書く
powered by ASAHIネット