问题标签 [htdp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scheme - PLT-Scheme学习参考
在读完两本Schemer书后,我即将开始 HtDP,但也发现了http://docs.plt-scheme.org/guide材料。
前面提到的书籍似乎更针对 Scheme,而后者更适合 PLT 特定的扩展(模块、require、括号语法等)。在线手册非常好,但我希望可能有我可以购买的书籍形式?
如果没有,我当然会感谢深入的在线手册 - 只是好奇!
scheme - 使用追加同时处理 2 个列表
我被HTDP 的练习 17.1.2 的问题困住了。这是我到目前为止所得到的:
这适用于测试用例,但是当第二个列表有超过 2 个元素时,函数就会崩溃。
问题似乎是追加后的第二行,因为它只从第二个列表中最多包含两个元素。我应该如何解决这个问题?感谢您的任何见解。:)
scheme - 在 Racket/Scheme 中使用 local
在 htdp 的练习 18.1.12 中,我使用“local”重写了 maxi 函数。
我不确定为什么我会在“现实生活”中这样做,因为这本书的版本似乎更短、更清晰,而且可能也更快。
它是否意味着纯粹的教学练习?有经验的 Schemer 可以评论上面的代码吗?谢谢你。
scheme - Racket/Scheme 中过滤器、映射、构建列表和本地函数的惯用用法?
我正在自己完成HtDP的练习 21.2.3 并且想知道这是否是各种功能的惯用用法。这是我到目前为止所拥有的:
对于我的新手来说,这看起来很丑陋,因为我必须定义一个本地函数才能开始build-list
工作,因为map
需要两个长度相等的列表。这可以提高可读性吗?谢谢你。
user-interface - 如何在 Racket/PLT-Scheme 中检索按钮的标签?
我正在尝试来自 HtDP 的练习 22.3.3,但不知道如何检索被单击按钮的标签。我收到这条消息draw-message: expected <string> as second argument, given: (instantiate (class ...) ...)
,似乎表明我需要一个字符串,但我得到了一个类的实例。回调中有答案吗?如果是这样,我该如何解构它?
这是我到目前为止所拥有的:
如果我理解正确,每个按钮都会call-back
在按下时调用。这反过来应该调用display
它将更新文本。但是,我不明白如何检索调用者的标签。例如,如果按下按钮“9”,它将调用call-back
. 但是如何检索值“9”?这是我不确定的。
scheme - 回溯无限循环
这是来自 HtDP 的练习 28.1.2。我已经成功实现了这个neighbors
功能并且所有的测试用例都通过了。
当我从Figure 77
文本中复制粘贴代码时,问题就来了。它应该确定目标节点是否可以从源节点到达。但是,除了源节点和目标节点相同的最简单情况外,代码似乎进入了无限循环。
问题出在我的代码中吗?谢谢你。
scheme - 本地与 lambda 的惯用用法?
在HtDP 的练习 30.1.1 中,我开始使用local
,然后将其修改为使用lambda
以回答问题。
和
在这种特殊情况下,对我来说,该local
版本更易于阅读。是否存在lambda
首选版本的情况?谢谢你。
scheme - 递归与累加器样式的性能
我们有两个函数可以计算给定数字的阶乘。第一个,!
,使用累加器样式。第二个,fact
,使用自然递归。
和
在第 31 节的底部,HtDP指出自然递归版本通常与累加器版本一样快,但没有说明原因。我对此进行了一些阅读,似乎答案是“尾调用优化/消除”,但维基百科的文章似乎与 HtDP 所说的不一致,至少在性能方面。为什么会这样?
在工作中,递归风格更快。在家里,蓄能器风格更快。是否没有一般的启发式方法来指导选择通常首选哪种风格?我知道累加器样式更节省内存,但如果我们将讨论仅限于性能,至少对我来说不清楚,哪个是更好的选择。
我对此进行了更深入的考虑,并且不得不支持维基百科关于一般情况下累加器式递归的优越性的文章。它不仅减少了堆栈/堆空间的使用,而且内存访问总是落后于寄存器访问,并且只有在多核出现后才能更加明显。尽管如此,HtDP 证明在所有情况下都需要进行实际测试。
scheme - 如何忽略球拍中使用`set!`的副作用?
在HtDP 的练习 35.4.2 中,我实现了 GUI 并有一个名为“Remove”的按钮,它调用回调函数。这里是:
当我运行它时,我收到以下消息:button-callback: result of type <Boolean> expected, your function produced #<set!-result>
. 问题是我必须打电话set!
才能更改通讯录。但是,set!
is的结果(void)
不能与布尔类型组合。我怎样才能避免这个问题?感谢您的任何见解。
scheme - #lang 方案和#lang 球拍之间的区别
我猜#lang 球拍是一种方案方言,具有更多开箱即用的结构和常见功能,也许更具教学性。反对#lang 计划的#lang 球拍有什么好处?
最好(甚至可能)在球拍中使用#lang 方案来遵循“计算机程序的结构和解释”甚至“如何设计程序”的所有内容。HtDP 是#lang 球拍特定的吗?
无论用#lang 方案编写的任何代码,只要不包含库,都可以在鸡方案或任何主解释器中使用吗?
提前致谢。