问题标签 [racket-student-languages]
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 - Racket:将新节点插入二叉搜索树
假设我们有一个二叉树结构:
我在创建二叉搜索树时遇到了麻烦。我的主要问题是,我不知道如何将节点插入树或覆盖 make-tree-node 结构中的左侧或右侧。
假设我们的树长度为 8,如果 left 或 right 为空,我想插入一个新节点。我的问题是我怎么走那么深?这可能递归吗?如果可以,我该怎么做?
只能使用中级。
tree - 在 Racket 中使用二叉搜索树
我想在 Racket 中创建一个二叉搜索树。树的结构如下所示:
现在我想在树中添加这些数字:
我的插入过程代码:
我对代码的想法是什么:
- 首先它检查给定的树是否为空,如果是,将创建一个新的
- 当列表中的第一个数字大于树的根时,它将在右侧添加,对于左侧较小
- 相同的数字将被忽略
我的问题:当树只是1并且过程添加 4 时,它添加为右侧的新根元素。然后当我添加 6 时,它将替换 4,但它应该为 6 添加一个新节点。
我知道这个版本的代码不起作用,因为在列表只是一个元素的情况下,这个代码不起作用。
代码级别为中级学生
scheme - 使用 big-bang 在 Racket (BSL) 中编程 Breakout。放置桨时出错
目标是制作游戏 Breakout 并逐步完成。我已经在实施桨的第一步遇到了问题。球和球的弹跳已经预先定义和给出。我希望像这样把它放在 (define (render ball) 中:
但是我收到错误“to-draw:一个参数的预期函数作为第一个参数;给定 2 个参数的函数”我不确定如何使代码更好。这是我的代码到目前为止的样子。球和刻度线已经预定义。到目前为止,我什至不能把桨放进去,但球会反弹(还没有砖块)
我很感激给出的任何提示!
scheme - 如何在 Breakout(球拍)中让球与砖块相撞
我一直试图让 Breakout 在 Racket 中工作,到目前为止,球从球拍上弹起(球拍由鼠标控制)并且砖块存在
这是完整的代码:
球直接飞过砖块。我在其中添加了以下代码:
但它似乎对任何事情都没有影响。我现在被困住了,希望有任何改进的提示!
scheme - 计算孩子上方血统树中的所有家庭成员 - 球拍 (*SL)
这是来自How To Design Programs的家谱 (FT) 的数据定义
我设计了一个函数来计算特定家谱中的所有人。
该函数通过简单地在每个父节点上重复并加 1 以组合对父节点的函数调用并在没有父节点时返回 0 来消耗一个家谱并计算树中的子结构
我的功能 - 在 Gustav 上启动时 - 计算了 Fred 和 Eva,然后是 Eva 的父母 Carl 和 Betrtina。它没有到达亚当和戴夫。
当我在 Gustav 上调用我的函数时,我如何(如果我想计算所有祖先,包括叔叔)联系到 Adam 和 Dave?
tl;博士
本质上如何可以遍历上面的所有世代?如何从“Gustav”访问“Dave”(没有提及他们!)。如何计算所有的祖先,不仅仅是父母,然后是他们的父母,等等。
scheme - 在两个列表上运行的函数
我正在为一个班级开发一个球拍程序,我完全不知道如何实现其中一个功能。
该程序使用 Big-Bang 并且应该实现一个简单的 Space Invaders 游戏。
除了一件,我什么都可以工作,那就是 - 如何处理导弹与入侵者相撞的情况。我挣扎的原因是我不知道如何编写一个函数,其中我有两个任意大小的列表,我必须检查一个列表中每个对象的字段与另一个列表中的每个对象并删除一个对象如果它们具有相同的值,则在每个列表中。
世界状态是游戏:
入侵者和导弹都是清单。
为了产生游戏的下一个状态,我实现了一个名为“tock”的函数。
通常,我会这样做:
但是由于入侵者和导弹列表的内容可能会由于碰撞而相互影响,我不能简单地单独更新位置并继续前进,我必须删除任何碰撞然后更新位置。
所以我试过:
但这使得 check-collision 需要一个坦克,它不需要。
在这个版本中,我有一个调用next-invaders
入侵者和导弹列表的函数,以及一个next-missiles
获取导弹和入侵者列表的函数。第一个函数针对每个导弹检查每个入侵者,尝试移除任何碰撞的入侵者并返回剩余的入侵者。第二个函数检查每个导弹与每个入侵者的关系,并尝试移除任何相撞的导弹并返回剩余的导弹。答案应该是一样的,但这是重复的工作,我担心可能出现的竞争状况。我不知道如何构造一个表达式,其中一个函数只需要两个字段,另一个需要三个字段,但我仍然会产生游戏的下一个状态。
这是一个例子next-invaders
。如果没有入侵者,它什么也不做。如果有入侵者但没有导弹,它只是移动每个入侵者(move-invader)
并递归调用自身迭代所有入侵者。如果既有导弹又有入侵者,则检查列表中的第一个入侵者与列表中的每一个导弹之间是否发生碰撞;所以检查碰撞是递归的。
check-collision
是否是从入侵者列表中“删除”碰撞入侵者的正确方法的“答案” ?
这是对每个列表的每个元素进行相互测试的正确方法吗?
更新:仍然在这个问题上兜圈子。check-collision 有效,invader-function 有效,但是当我返回到导弹功能时,我不知道如何指示在入侵者功能中检测到碰撞的情况下需要删除导弹。
racket - ISL+(球拍)中的有限状态机仿真实现
我是一个通过 HTDP2(Felleisen 等人)独自工作的新手,但一直被困在第四章的问题 #380 -Intertwined Data 上。问题出在创建 DSL 的上下文中,但我首先重新熟悉了一个通用的 FSM 模拟器,并提供了以下代码:
那么问题表述如下:
重新制定 1Transition 的数据定义,以便可以将转换限制为某些击键。尝试制定变化,以便在find
没有变化的情况下继续工作。您还需要进行哪些更改才能使完整的程序正常运行?设计配方的哪一部分提供了答案?原始练习陈述见练习 229。
练习 229 引入了一个结构类型定义来跟踪状态和转换,但是由于问题陈述要求我留在提供的find
函数内,我很难想出一个类似的结构类型定义。相反,我想出了以下数据定义:
因此调用(find fsm-traffic "green")
I get(list "g" "yellow")
我已将on-key
子句修改如下:
现在,如果我启动程序,(simulate "red" fsm-traffic)
State0 被渲染,如果我按“r”,它会进入“绿色”FSM-State,但它不会接受“g”进入下一个状态,依此类推。
如果我开始这个世界程序,(simulate "yellow" fsm-traffic)
那么 FSM 状态“黄色”会被渲染,但它不会转换到任何其他状态(该error
子句被激活);同样以“绿色”为起始状态。
我的预感是,由于我fsm-traffic
首先定义了“红色”状态,因此它接受其输入以转换为“绿色”,但由于其他状态没有发生同样的情况,因此big-bang
不会“处理”transitions
参数正确。但我只是不知道如何解决这个问题。我也不知道从我的数据定义开始我是否出错了。
预先感谢您帮助我。
PD 请让我知道我是否遵守了在 stackoverflow 上发帖的规则(这是我的第一篇文章 :)。
racket - 编程新手,HTDP Prologue 中关于练习的问题
这可能是一个愚蠢的问题,但我对编程完全陌生。我在“如何设计程序”(第 2 版)中接近序言的底部,您需要对 DrRacket 中的“火箭着陆”程序进行 4 项更改。
我被困在第四个,特别是粗体部分:
您将如何更改程序,使火箭降落在比场景底部高 10 像素的平坦岩床上?也别忘了换风景。
我的火箭(不明飞行物)正在做第一部分,从底部停止 10 像素,但我不确定如何使用我目前学到的命令在底部绘制岩床。我是否在底部(覆盖)一个 10 像素的矩形?还是作者只是将场景背景更改为灰色?
scheme - 计算球拍 BSL 中给定数字的适当除数之和
设计一个名为 Racket 的函数findProperDivisor
,它接受一个自然数并计算其所有适当除数的总和。自然数的适当除数是严格小于该数的除数。
例子:
输入:20
输出:22
//适当的除数:1 + 2 + 4 + 5 + 10 = 22
我在此页面上找到了此代码,但它给了我1+2+4+5+10+20=42
我需要的代码22
。
我想通过使用递归和一个参数来编写这段代码cond
。我正在使用初级学生语言 (BSL),它没有let
定义之类的东西。