我正在尝试潜入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纯文本?
答案 0 :(得分:4)
Eli Barzilay指出Geiser项目包含code来提取此文档。
我确实有一些实验性的源代码可以从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 mailing list的人们,xrepl
能够访问基于文本的文档是一件很重要的事情;也许它会得到推动力。
答案 1 :(得分:4)
几周前,XREPL ,describe
命令被增强,用于打印函数参数名称和契约; source
这是来自Racket文档的“蓝盒子” - 之所以这么称呼是因为在Racket 6 CSS重新设计之前它们曾经是蓝色的;现在他们实际上是灰色的:)。
你可以通过从HEAD建立Racket来实现这一目标。否则,它应该在6.1之后的下一个版本中。
请记住,这似乎仅限于在已安装的软件包中包含Scribble文档的功能。
答案 2 :(得分:3)
我不确定这是否适用于Racket,但在麻省理工学院计划中有几个内置程序可以让你接近。 (下面,proc
代表任何程序)
(procedure-arity proc)
将为您提供参数数量(pa proc)
将打印参数列表(pp proc)
将打印程序正文这适用于许多内置程序以及您自己定义的任何程序,但如果您尝试使用define
或set!
这样的特殊表单调用其中任何一个,您将获得错误。