相关疑难解决方法(0)

通过宏继续使用常见的lisp - 关于OnLisp中的实现

On Lisp,p.267,Paul Graham提供了一个继续传递宏的实现:

(setq *cont* #'identity)

(defmacro =lambda (parms &body body)
  `#'(lambda (*cont* ,@parms) ,@body))

(defmacro =defun (name parms &body body)
  (let ((f (intern (concatenate 'string
                "=" (symbol-name name)))))
    `(progn
       (defmacro ,name ,parms
     `(,',f *cont* ,,@parms))
       (defun ,f (*cont* ,@parms) ,@body))))

(defmacro =bind (parms expr &body body)
  `(let ((*cont* #'(lambda ,parms ,@body))) ,expr))

(defmacro =values (&rest retvals)
  `(funcall *cont* ,@retvals))
Run Code Online (Sandbox Code Playgroud)

以下代码遍历树t2的每个叶子的树t1,使用此实现,我想知道restart调用时会发生什么,特别是在t1A(第一个元素)更改为B(第二个元素)的叶子之后.当restart被调用时,它只是从弹出lambda函数*saved*,而lambda函数调用dft-node …

lisp continuations common-lisp continuation-passing on-lisp

4
推荐指数
1
解决办法
692
查看次数

尖锐的引号(#')与符号函数有何不同?

对我来说,这些运营商似乎做了同样的事情.两者都采用符号并返回与之关联的函数.有什么区别吗?

elisp 评估返回以下内容:

(defun foo(x)(+ 1 x))
foo
(foo 3)
4
#'foo

我也不明白.

常见的lisp和elisp有区别吗?我正在从中学习资源.

lisp elisp common-lisp sharp-quote

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