gpt4 book ai didi

scheme - 哪些 lisp 实现允许我在运行时修改代码?

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:03 24 4
gpt4 key购买 nike

Lisp 是谐音的,这意味着代码可以被视为数据。哪些实现允许我在运行时这样做?以下是我的意思的伪代码示例:

(defun (my-func)
(display "foo ")
(display "bar ")
(display "baz "))

(defun (main-loop)
(my-func)
(swap (first my-func) (second my-func))
(main-loop))

那应该重复输出“foo bar baz bar foo baz”。

最佳答案

这可能不是最优雅的方法,但在常见的 Lisp 中你可以这样做:

> (setq f '(defun foo () (princ "foo ") (princ "bar ") (princ "baz ")))
(DEFUN FOO NIL (PRINC "foo ") (PRINC "bar ") (PRINC "baz "))
> (eval f)
FOO
> (foo)
foo bar baz
NIL
> (defun frot ()
; Call foo (stored in f)
(funcall (eval f))
; Swap the 1st and 2nd statements in foo
(setf tmp (cadddr f))
(setf (cadddr f) (cadr (cdddr f)))
(setf (cadr (cdddr f)) tmp)))
FROT
> (frot)
foo bar baz
(PRINC "foo ")
> (frot)
bar foo baz
(PRINC "bar ")
> (frot)
foo bar baz
(PRINC "foo ")

这在 f 中存储了一个 Lisp 函数,而不是在原地 中执行它,但它确实说明了一个事实,即 Lisp 程序本身就是一个 Lisp 数据结构,而不是可以动态操作和执行。

关于scheme - 哪些 lisp 实现允许我在运行时修改代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21035218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com