gpt4 book ai didi

lisp - 可以在 Scheme REPL 中重置用户环境吗?

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

Scheme新手问题-

有没有办法让我在不退出并重新启动我的 REPL 的情况下重置我当前的 REPL 环境(即默认用户环境)?基本上我想要一种方法来清除我当前的环境,这样我以前的定义都不会生效。这是使用 GNU/MIT 方案。

如果这是不可能的,那么在 REPL 中随意修改代码的最佳实践是什么?我听过人们谈论创建和删除包,但大多数示例似乎是针对 Common Lisp 的,这有点不同。

我确实在 Clojure REPL 中找到了有关如何执行此操作的信息,但有一些注意事项,而且它似乎是特定于 Clojure 的:Can I clean the repl?

谢谢!

编辑:通过退出并重新启动 REPL 进程本身,我能够在功能上完成相同的事情。我找到了一种方法来执行此操作,但使用 vim-screen 保持与我的编辑器 (vim) 的连接。如果无法从 REPL 中执行此操作,则这是一个可接受的解决方案。但是,我会让这个问题再开放一段时间,看看是否有一种方法可以在语言中做到这一点,因为我认为这会很有启发性。

最佳答案

我认为这是特定于实现的,但在 MIT Scheme 中,您可以使用以下方法清除 REPL 环境:

1 ]=> (ge (make-top-level-environment))

函数 (ge [environment]) “将当前 REP 循环环境更改为 [environment]。”和函数 make-top-level-environment “返回一个新分配的顶级环境”。

MIT Scheme 有一堆环境管理函数,你可以仔细阅读 here

我在 Mac OS X (10.6.7) 上测试了这个,MIT Scheme 9.0.1 通过来自 GNU 站点的预构建二进制文件安装,使用以下 REPL session :

1 ]=> (define foo 1)

;Value: foo

1 ]=> foo

;Value: 1

1 ]=> (ge (make-top-level-environment))

;Value 13: #[environment 13]

1 ]=> foo

;Unbound variable: foo
;To continue, call RESTART with an option number:
; (RESTART 3) => Specify a value to use instead of foo.
; (RESTART 2) => Define foo to a given value.
; (RESTART 1) => Return to read-eval-print level 1.

2 error>

我认为不同的实现有不同的约定,但我认为没有什么能像 Common Lisp 的包那样。如果你不喜欢 MIT Scheme,你应该看看 Racket 和 Dr Racket,这是一个不错的 IDE,可能比命令行上的普通 REPL 更强大,我认为它有某种模块系统。 Racket 是它自己的 Scheme 方言,因此根据您正在做的事情,它可能不合适。 (Racket中的默认语言模块与MIT Scheme不一样)

最近(过去几个月)我一直在努力解决所有这些问题,当时我正在寻找一个可以在 Small Pieces 中运行 Lisp 代码的方案,它有一堆奇怪的宏。 Gambit 最终成为最好的选择。如果您没有这样的需求,请查看 Racket。

关于lisp - 可以在 Scheme REPL 中重置用户环境吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7074122/

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