如何评估传递给`parenscript:ps`宏的代码?

问题描述

如何评估Parenscript中传递给ps宏的代码

(let ((x 1))
  (format nil "~a" (parenscript:ps x))) 
;; => "x;" but I would like "1;"

我知道ps一个宏,是不进行评估的原因,但是如何评估传递给ps宏的代码

解决方法

您使用ps:lisp的示例:

(let ((x 1))
  (format nil "~a" (ps:ps (ps:lisp x))))
"1;"

它在文档的第一部分中进行了介绍:https://common-lisp.net/project/parenscript/reference.html#section-ps-compiler

,

我明白了:

(defmacro lisp-to-js (lisp)
  (eval ``(parenscript:ps,lisp)))
(let ((x 1))
  (format nil "~a" (lisp-to-js x)))
;; => "1;"