Racket 我怎样才能使用“多”字;return";下面代码段中的语句?

Racket 我怎样才能使用“多”字;return";下面代码段中的语句?,racket,Racket,在else条件下,我有两条语句要执行。第一个应该将我的计算附加到我的返回列表中,第二个应该再次调用我的递归过程。 问题是我的append过程被忽略了,所以我只是返回一个空列表 (define (calcit x lst) (cond ((= x 0) retlst) (else (append (list (floor (/ x (first lst)))) retlst) (calcit (modulo x

在else条件下,我有两条语句要执行。第一个应该将我的计算附加到我的返回列表中,第二个应该再次调用我的递归过程。 问题是我的append过程被忽略了,所以我只是返回一个空列表

(define (calcit x lst)
    (cond ((= x 0)
           retlst)
           (else (append (list (floor (/ x (first lst)))) retlst)
                 (calcit (modulo x (first lst)) (rest lst)))))

您需要对正在创建的数据进行处理。您可能希望在从递归得到的列表结果上使用第一个元素:

(define (calcit x lst)
  (if (= x 0) 
      '() ;; base case
      (cons (floor (/ x (first lst)))
            (calcit (modulo x (first lst)) (rest lst)))))

在使用递归的Scheme中创建列表时,请尽量避免
追加
。使用
append
是一种反模式。了解计划列表是如何工作的,并进行培训以熟悉它。例如,
”((23)(45))
如果我问你如何从中获得
5
,你应该想一想,然后马上回答
cadadr

谢谢你的回答!
retlist
defined在哪里?前面在code中。它只是(define retlst(list)),当您返回它时,它当然是空的。它被定义为空,所以它保持为空。