假设我有一个像这样的裸骨样本的花园式闭包:
(let ((alpha 0) #| etc. |# )
(lambda ()
(incf alpha)
#| more code here |#
alpha))
Run Code Online (Sandbox Code Playgroud)
假设我(funcall)是该闭包的一个实例三次,并且在第三次执行的中间,这个闭包想要将它自己保存在某个地方(比如在哈希表中).然后我暂时没有(funcall)这个实例.然后我从哈希表中(funcall)再次检索此实例,并获得返回值4.
闭包中的函数如何引用自身,因此它可以将自己保存在该哈希表中?
编辑1:这是一个更详细的例子.我通过将闭包作为参数传递给自己来实现目标.但我希望闭包能够在不进行自我参数化的情况下完成所有这些操作.
1 (defparameter *listeriosis* nil)
2 (defparameter *a*
3 (lambda ()
4 (let ((count 0))
5 (lambda (param1 param2 param3 self)
6 (incf count)
7 (when (= 3 count)
8 (push self *listeriosis*)
9 (push self *listeriosis*)
10 (push self *listeriosis*))
11 count))))
12 (let ((bee (funcall *a*)))
13 (princ (funcall bee 1 2 …Run Code Online (Sandbox Code Playgroud) 有人可以给出一个相对简单的例子,说明在call-with-composable-continuation和之间的球拍call-with-current-continuation.
我已经完成了" 球拍指南10.3"中call-with-composable-continuation的示例以及call-with-current-continuation"方案编程语言"第3.3节中的示例,但我不清楚它们之间的区别.
有人可以给出一个例子,他们会在同一个背景下给出不同的结果.