相关疑难解决方法(0)

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

我目前正尝试深入研究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纯文本格式?

scheme racket read-eval-print-loop

5
推荐指数
2
解决办法
2614
查看次数

使用trace在球拍中显示一个程序

我一直在研究SICP的最后几个练习,其中几个练习使用高阶函数.目前我正在尝试将我的解决方案中的问题调试到1.45,这会导致arity不匹配.提高误差的功能是两次对定点函数求解器应用平均操作的结果.

它将使我调试的努力了很多容易,如果我可以只转储某种程序表示,鉴于该程序已经通过其他几个能够改变它,它会引发错误之前的程序运行.我看过对DrRacket,增加了调试文件(require racket/trace)(require errortrace)我的模块,我认为我熟悉的调试系统的所有功能-但我仍然不知道如何做到这一点.

DrRacket的答案是理想的,但任何事情都有帮助.

scheme sicp racket

5
推荐指数
1
解决办法
5026
查看次数

有没有办法在Racket中看到lambda的身体?

说我有这个代码:

#lang racket

(define a
  ((? (x) x)
   ((? (y) y)
    (? (z)
      ((? (w) w) z)))))
Run Code Online (Sandbox Code Playgroud)

我直观地知道这个lambda表达式(扩展性地)等于 (? (z) z)

我的问题是,如果a我想看看Racket在内部简化了多少功能,是否有办法打印出来.


更多信息:

默认情况下,如果我输入a解释器,我得到#<procedure:y>(这似乎提示了评估发生了多少).我可以将输出样式更改为"构造函数",然后结果是(lambda (a1) ...)更接近我想要的结果,但我仍然不知道正文中哪些是重要的部分.

我想有人可以通过对Racket的评估策略有更全面的了解来回答这个问题,但是如果显示程序主体是一件可能发生的事情,我仍然感兴趣.

lambda scheme racket

3
推荐指数
1
解决办法
327
查看次数

标签 统计

racket ×3

scheme ×3

lambda ×1

read-eval-print-loop ×1

sicp ×1