Eli*_*iot 6 lisp scheme reset read-eval-print-loop
方案新手问题 -
有没有办法让我重置当前的REPL环境(即默认用户环境)而不退出并重新启动我的REPL?基本上我想要一种消灭我当前环境的方法,这样我以前的定义都没有生效.这是使用GNU/MIT Scheme.
如果这是不可能的,那么在REPL中乱码时最好的做法是什么?我听说人们谈论创建和删除包,但大多数例子似乎是针对Common Lisp,这有点不同.
我确实在Clojure REPL中找到了有关如何执行此操作的信息,但有一些警告,看起来它是Clojure特定的:我可以清理repl吗?
谢谢!
编辑:通过退出并重新启动REPL进程本身,我能够在功能上完成同样的事情.我找到了一种方法来做到这一点,但使用vim-screen保持与我的编辑器(vim)的连接.如果在REPL中无法做到这一点,这是一个可接受的解决方案.但是,我会把问题打开一段时间,以确定是否有办法在语言中执行此操作,因为我认为这将是有益的.
mic*_*kig 12
我认为这是特定于实现的,但在MIT Scheme中,您可以使用以下命令清除REPL环境:
1 ]=> (ge (make-top-level-environment))
Run Code Online (Sandbox Code Playgroud)
功能(ge [environment])"将当前REP循环环境更改为[环境]." 和函数make-top-level-environment"返回一个新分配的顶级环境".
麻省理工学院计划有许多环境管理功能,你可以在这里仔细阅读
我在Mac OS X(10.6.7)上使用MIT Scheme 9.0.1通过GNU站点的预构建二进制文件进行了测试,并使用以下REPL会话:
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>
Run Code Online (Sandbox Code Playgroud)
我认为不同的实现有不同的约定,但我不认为有任何类似Common Lisp的包.如果您没有与MIT Scheme结合,那么您应该查看Racket和Dr Racket,这是一个很好的IDE,可能比命令行上的普通REPL更强大,而且我认为它有某种模块系统.Racket是它自己的Scheme方言,所以根据你所做的,它可能不合适.(Racket中的默认语言模块与MIT Scheme不同)
我最近(过去几个月)一直在努力寻找一个可以运行Lisp in Small Pieces中的代码的Scheme,它有一堆奇怪的宏.Gambit最终成为最好的选择.如果你没有这样的需要,请查看Racket.