我在http://www.ccs.neu.edu/home/shivers/newstyle.html网站上看到了一段代码:
> (defun element-generator ()
(let ((state '(() . (list of elements to be generated)))) ;() sentinel.
(let ((ans (cadr state))) ;pick off the first element
(rplacd state (cddr state)) ;smash the cons
ans)))
ELEMENT-GENERATOR
> (element-generator)
LIST
> (element-generator)
OF
> (element-generator)
ELEMENTS
> (element-generator)
TO
> (element-generator)
BE
> (element-generator)
GENERATED
Run Code Online (Sandbox Code Playgroud)
我不明白该功能如何记住状态.state
每次函数运行时都没有重新定义到整个列表?为什么两层let
(这是必要的)?如果有人能够解释这个功能是如何工作的,那将不胜感激.
state
in 的值(let ((state '(() . (list of elements to be generated)))) ...)
是带引号的文字,并且它正在被修改(正如本答案中所解释的那样是未定义的行为).此行为已经讨论过其他问题,例如:
归档时间: |
|
查看次数: |
425 次 |
最近记录: |