用于在dr方案中对n个数字进行排序的数据结构我不允许使用向量和结构..如果我使用列表我无法编辑列表值.所以我如何排序n个数字.我使用的语言是文本mzscheme rsr5
目前,当我正在尝试功能语言的延续时,我的理解是继续记录当前程序计数器和寄存器文件,当返回延续时,PC和注册文件将恢复为它记录的值.
所以在Might博客文章中的以下愚蠢的例子中,
; right-now : -> moment
(define (right-now)
(call-with-current-continuation
(lambda (cc)
(cc cc))))
; go-when : moment -> ...
(define (go-when then)
(then then))
; An infinite loop:
(let ((the-beginning (right-now)))
(display "Hello, world!")
(newline)
(go-when the-beginning)) ; here the-beginning continuation passed to go-when, which ultimately will have an continuation applied to an continuation, that returns a continuation, which will cause the the program point resumed to the PC and registers states recorded in it.
Run Code Online (Sandbox Code Playgroud)
我不确定我的理解是对的..如果你认为不是,请纠正我.....
我正在分析代码,我看到了这一点
[(exp + exp) (+ $1 $3)]
Run Code Online (Sandbox Code Playgroud)
现在我想知道这是做什么的?是否需要该列表的第一个和第三个元素?那个设置在左侧甚至被认为是一个列表?我正在学习这门语言,但我已经度过了非常艰难的时光,所以你们一直都是最好的帮助.谢谢!
我正在使用BSL语言在HtDP,第4章中工作.
我正在处理的问题是:
练习136:如果你运行main,按空格键(开枪),等待很长时间,镜头从画布上消失.但是,当您关闭世界画布时,结果是一个仍包含此隐形镜头的世界.
设计一个替代的tock函数,它不仅可以每个时钟刻度移动一个像素,还可以消除那些坐标位于画布上方的像素.提示:您可能希望考虑为递归cond子句设计辅助函数.
我想出的解决方案如下(在剧透中).但是,我觉得我在做一些多余的事情.基本上我的辅助功能的应用不太正确.
(define (main w0)
(big-bang w0
(on-tick ticking)
(on-key fire-key)
(to-draw to-render)))
(define HEIGHT 100)
(define WIDTH 80)
(define TURRET-X-POS (/ WIDTH 2))
(define BKGRND (empty-scene WIDTH HEIGHT))
(define SHOT-IMG (triangle 4 "solid" "red"))
(define (to-render w0)
(cond
[(empty? w0) BKGRND]
[else (place-image SHOT-IMG TURRET-X-POS (first w0) (to-render (rest w0)))]))
(define (fire-key w0 ke)
(cond
[(key=? ke " ") (cons HEIGHT w0)]
[else w0]))
(define (ticking w0)
(cond
[(empty? w0) empty]
[(empty? (only-inbound-shots w0)) empty]
[else …Run Code Online (Sandbox Code Playgroud) SRFI 42中的急切理解可以有一个:while在某些条件成立时运行生成器的子句,例如:(list-ec (:while (:range i 10) (< (* i i) 50)) i)返回列表(0 1 2 3 4 5 6 7)(并停止 7处的迭代,不像是if,如(list-ec (:range i 10) (if (< (* i i) 50)) i)将继续运行,但不会产生更多值).
在拍,我一般喜欢使用原生for和for/list,但他们似乎并不具备这样的内置.什么是:while在Racket中模拟的最佳方式for?
以下函数是尾递归的吗?如果没有,我可以做些什么来修改它?
(define (euclids-alg n1 n2)
(cond((= n1 0) n2)
((= n2 0) n1)
((= n1 n2) n1)
((> n1 n2) (euclids-alg (- n1 n2) n2))
((< n1 n2) (euclids-alg n1 (- n2 n1)))))
Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题,几个小时无法在Scheme中实现.假设我们有:
(define x '( (Orlando (NY 3))
(Chicago (Montana 5) (Orlando 8))
...and so on ...
)
Run Code Online (Sandbox Code Playgroud)
我想把它改造成
'( (Orlando NY)
(Chicago Montana Orlando)
...and so on ...
)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我对Racket有疑问.
(我正在使用http://docs.racket-lang.org/guide/conditionals.html上的教程)
我试着编写一个执行此操作的函数:如果x小于4,则应该增加1,否则应该乘以2.
(define (number x)
(if (< x 4) 'x+1 'x*2))
Run Code Online (Sandbox Code Playgroud)
所以我在DrRacket上编译它,但它没有做任何事情.该(if (< x 5) 'x+1 'x*2))-Part被标记为黑色!我认为问题就在'于此.
我正在尝试将Racket上的两个列表相交,但是以下代码不起作用:
(define (intersection a b)
(if (null? a)
'()
(if (contains (car a) b)
(cond (car a)(intersection (cdr a) b))
(intersection (cdr a) b))))
Run Code Online (Sandbox Code Playgroud)
结果总是以列表b中包含的列表a的第一项加上列表a的其余部分结束。例如:
a = '(1 2 3 4 5 6)
b = '( 10 20 4 30 33)
Run Code Online (Sandbox Code Playgroud)
将返回:
'(4 5 6)
Run Code Online (Sandbox Code Playgroud)
我确定包含内容正确运行,因此错误必须出在我发布的代码中。谢谢!