Racket 球拍:为什么不编译?
我正试图编写一个简单的函数,将整数从“高”和“低”的范围递减,并以“步长”递增 比如说,, 如果输入为(3 12 3),则预期输出为“(12 9 6 3) 以下是以下代码:Racket 球拍:为什么不编译?,racket,Racket,我正试图编写一个简单的函数,将整数从“高”和“低”的范围递减,并以“步长”递增 比如说,, 如果输入为(3 12 3),则预期输出为“(12 9 6 3) 以下是以下代码: (define (downSeries step high low [(define ret '())]) (if (< high low) ret (cons ret (- high step)) (downSeries (step (- high step) low))))
(define (downSeries step high low [(define ret '())])
(if (< high low)
ret
(cons ret (- high step))
(downSeries (step (- high step) low))))
(定义(下行序列阶跃高-低[(定义ret'())]))
(如果(<高-低)
ret
(cons ret(-高阶))
(向下系列(阶跃(-high-step)low)))
我对球拍还不太熟悉,但我真的不知道为什么这不适合我。有什么建议吗?谢谢。因为只有racket被标记,并且没有特殊的语言被描述,所以它被导出。定义窗口中的第一行是#lang racket
。学生语言的答案会有所不同
1最后一个参数嵌套在两个括号中,语法非法。默认参数只有一个集合:
(define (test mandatory (optional '()))
(list mandatory optional))
(test 1) ; ==> (1 ())
(test 1 2) ; ==> (1 2)
2您的if
表单中有4个操作数。最多需要3分钟
(if prediate-expression
then-expression
else-expression)
查看代码,您应该将cons
表达式置于ret
参数的位置。在递归之前拥有它会使它成为死代码ret
将始终是()
。例如,这与典型的折叠实现类似:
(define (fold-1 combine init lst)
(if (null? lst)
init ; fully grown init returned
(fold-1 combine
(combine (car lst) init) ; init grows
(cdr lst))))