作者 Anonymous [lisp] 2012-05-19 19:07 (点击下载)

  1. (defun memo-proc (proc)
  2. (let ((has-value? nil)
  3. (value 'unknown))
  4. #'(lambda ()
  5. (cond (has-value? value)
  6. (t
  7. (setf value (funcall proc))
  8. (setf has-value? t)
  9. value)))))
  10.  
  11. (defmacro delay (expression)
  12. `(memo-proc #'(lambda () ,expression)))
  13. (defun force (promise)
  14. (funcall promise))
  15.  
  16. (defmacro cons-stream (head tail)
  17. `(cons ,head (delay ,tail)))
  18. (defun stream-car (s)
  19. (car s))
  20. (defun stream-cdr (s)
  21. (force (cdr s)))
  22.  
  23. (defun stream-ref (s n)
  24. (if (= n 0)
  25. (stream-car s)
  26. (stream-ref (stream-cdr s) (- n 1))))
  27.  
  28. (defun stream-map (f &rest streams)
  29. (print (car streams))
  30. (cons-stream
  31. (apply f (mapcar #'stream-car streams))
  32. (apply #'stream-map f (mapcar #'stream-cdr streams))))
  33.  
  34. (defun add-streams (&rest streams)
  35. (apply #'stream-map #'+ streams))
  36.  
  37. ;; Examples
  38.  
  39. (defvar ones (cons-stream 1 ones))
  40. (defvar fibs
  41. (cons-stream 0
  42. (cons-stream 1
  43. (add-streams fibs
  44. (stream-cdr fibs)))))

提交下面的校正或者修改. (点击这里开始一个新的帖子)
姓名: 在 cookie 中记住我的名字

屏幕抓图:(jpeg 或 png)