小编2ab*_*ses的帖子

lisp 宏来构建表达式列表及其评估

我正在尝试在 Common Lisp 中编写一个宏,它接受任意数量的表达式并构建一个包含每个表达式的列表,然后在一行中对其进行评估。例如,如果我将宏命名为

(defmacro list-builder (&rest exp)
    ...)
Run Code Online (Sandbox Code Playgroud)

我跑

(let ((X 1) (Y 2)) (list-builder (+ X Y) (- Y X) X))
Run Code Online (Sandbox Code Playgroud)

我希望它返回:

'((+ X Y) 3 (- Y X) 1 X 1)
Run Code Online (Sandbox Code Playgroud)

到目前为止我能做的最好的是使用代码获取表达式列表

(defmacro list-builder (&rest exp)
  `',@`(',exp ,exp))

INPUT: (let ((X 1) (Y 2)) (list-builder (+ X Y) (+ Y X) X))
'((+ X Y) (+ Y X) X)
Run Code Online (Sandbox Code Playgroud)

macros common-lisp lisp-macros

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

标签 统计

common-lisp ×1

lisp-macros ×1

macros ×1