I'm currently trying to dive into Racket/Scheme a bit. I have an instance of the (X)REPL running next to my editor, which helps me immensely to explore the language. However, I can't seem to find an XREPL command or macro (or whatever) which would show me the source code of a function.
All the needed parts seem to be there:
XREPL's describe
command knows the file:
-> ,describe string-join
; `string-join' is a bound identifier,
; defined in racket/string.rkt
; required directly
and get-collects-search-dirs
knows the path:
-> (require setup/dirs)
-> (get-collects-search-dirs)
'(#<path:/home/richard/.racket/5.2.1/collects>
#<path:/usr/local/lib/racket/collects>)
And on the reflection side of things we have:
-> (procedure-arity string-join)
2
But it all stops short of being useful if all you want to know is how to call the function. Is there a way to access the function's implementation, or at least the parameter names?
Or, which would also work for me - some kind of in-REPL plain text equivalent of the documentation that help
opens?
I'm not sure if this applies to Racket, but in MIT scheme there are a couple built-in procedures that will get you close. (Below, proc
just stands for any procedure)
(procedure-arity proc)
as you mentioned will give you the number of arguments(pa proc)
will print the argument list(pp proc)
will print the body of the procedureThis will work for many of the built in procedures as well any that you define yourself, but if you try to call any of these on a special form like define
or set!
you will get an error.
A couple weeks ago the XREPL ,describe
command was enhanced to print the function argument names and contract; source.
This is the "blue box" from Racket documentation -- so called because they used to be blue before the Racket 6 CSS redesign; now they're actually grey :).
You can get this by building Racket from HEAD. Otherwise, it should be in the next release after 6.1.
Keep in mind that this appears to be limited to functions that have Scribble documentation in installed packages.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With