相关疑难解决方法(0)

封闭如何引用自身?

假设我有一个像这样的裸骨样本的花园式闭包:

(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)

lisp clisp common-lisp

5
推荐指数
2
解决办法
264
查看次数

Racket中不同类型的延续

有人可以给出一个相对简单的例子,说明在call-with-composable-continuation和之间的球拍call-with-current-continuation.

我已经完成了" 球拍指南10.3"call-with-composable-continuation的示例以及call-with-current-continuation"方案编程语言"第3.3节中的示例,但我不清楚它们之间的区别.

有人可以给出一个例子,他们会在同一个背景下给出不同的结果.

scheme continuations racket

5
推荐指数
1
解决办法
1002
查看次数

标签 统计

clisp ×1

common-lisp ×1

continuations ×1

lisp ×1

racket ×1

scheme ×1