是否可以从Racket REPL内查看函数的源代码?

rwo*_*wos 5 scheme racket read-eval-print-loop

我目前正尝试深入研究Racket / Scheme。我的编辑器旁边有一个(X)REPL实例,它可以极大地帮助我探索语言。但是,我似乎找不到能够向我展示函数源代码的XREPL命令或宏(或其他内容)。

所有需要的部分似乎都在这里:

XREPL的describe命令知道该文件:

-> ,describe string-join
; `string-join' is a bound identifier,
;   defined in racket/string.rkt
;   required directly
Run Code Online (Sandbox Code Playgroud)

get-collects-search-dirs知道路径:

-> (require setup/dirs)
-> (get-collects-search-dirs)
'(#<path:/home/richard/.racket/5.2.1/collects>
  #<path:/usr/local/lib/racket/collects>)
Run Code Online (Sandbox Code Playgroud)

而在事物的反射方面,我们有:

-> (procedure-arity string-join)
2
Run Code Online (Sandbox Code Playgroud)

但是,如果您只想知道如何调用该函数,那么这一切都将毫无用处。有没有办法访问函数的实现,或者至少是参数名称?

或者,哪种方式对我也有用-某种与help打开的文档等效的in-REPL纯文本格式?

rob*_*ips 5

我不确定这是否适用于 Racket,但在 MIT 计划中,有一些内置程序可以让您接近。(以下,proc仅代表任何程序)

  1. (procedure-arity proc) 正如你提到的会给你参数的数量
  2. (pa proc) 将打印参数列表
  3. (pp proc) 将打印程序的主体

这将适用于许多内置过程以及您自己定义的任何过程,但是如果您尝试以特殊形式调用其中任何一个,例如define或 ,set!您将收到错误。


Gre*_*ott 5

几周前,XREPL,describe命令得到增强,可以打印函数参数名称和合约;来源

这是 Racket 文档中的“蓝色盒子”——之所以这么叫,是因为在 Racket 6 CSS 重新设计之前它们曾经是蓝色的;现在它们实际上是灰色的:)。

您可以通过从 HEAD 构建 Racket 来获得此功能。否则,它应该在 6.1 之后的下一个版本中。

请记住,这似乎仅限于在已安装的软件包中具有 Scribble 文档的功能。