Racket 球拍:为什么不编译?

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))))

我正试图编写一个简单的函数,将整数从“高”和“低”的范围递减,并以“步长”递增

比如说,, 如果输入为(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))))
(定义(下行序列阶跃高-低[(定义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))))