6

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

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

XREPL 的describe命令知道文件:

-> ,describe string-join
; `string-join' is a bound identifier,
;   defined in racket/string.rkt
;   required directly

并且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>)

在我们所拥有的事物的反射方面:

-> (procedure-arity string-join)
2

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

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

4

3 回答 3

5

我不确定这是否适用于 Racket,但在 MIT 方案中,有几个内置程序可以让你接近。(以下,proc仅代表任何程序)

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

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

于 2012-04-22T14:37:57.907 回答
4

Eli Barzilay 指出Geiser项目包含提取此文档的代码。


我确实有一段实验性的源代码,它可以从 HTML 文档中提取文本,尽管该代码可能已经过时了。

见: https ://github.com/dyoo/wescheme-docs/blob/master/test-extract-docstring.rkt

及其依赖项,位于:https ://github.com/dyoo/wescheme-docs 。

我编写的extract-docstring.rkt库在 Racket 5.2.1 下工作,但我承认我正在做一些非常恶心的事情来从文档中提取文本。

告诉Racket Users 邮件列表中的人们,能够访问基于文本的文档xrepl是一件很重要的事情,这可能是值得的;也许它会推动推动力。

于 2012-04-12T17:38:18.620 回答
4

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

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

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

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

于 2014-08-11T15:00:01.710 回答