如何在运行时编译s-表达式,然后在Common Lisp中执行它



我正在开发一个生成程序的程序(遗传编程(。我在运行时构建了一个s-表达式,今天我使用这样的eval:

(defvar *program* '(+ x 1))
(defvar x 10)
(eval *program*) ;; returns 11

计算是为多个x完成的,我想在运行时将s表达式编译成一个函数,然后为多个x调用它以提高性能。

我不知道该怎么做,我会感谢你的帮助。这是我所拥有的:

;;;; This is not working code
(defmacro compile-program (args &body body)
(compile nil `(lambda (,@args)
(declare (ignorable ,@args))
(progn ,@body))))
(funcall (compile-program (x) *program*) 10) ;; returns (+ X 1)
(funcall (compile-program (x) (+ x 1)) 10) ;; returns 11

编辑:我对@RainerJoswig做了以下修改,它有效:

;;;; Working Code
(defvar *program* '(+ x 1))
(defun compile-program (args program)
(compile nil `(lambda ,args
(declare (ignorable ,@args))
,program)))
(funcall (compile-program '(x) *program*) 10) ;; returns 11

Thx到@RainerJoswig和@coredump我做了以下修改,它有效:

;;;; Working Code
(defvar *program* '(+ x 1))
(defun compile-program (args program)
(compile nil `(lambda ,args
(declare (ignorable ,@args))
,program)))
(funcall (compile-program '(x) *program*) 10) ;; returns 11

相关内容

  • 没有找到相关文章

最新更新