Racket 我怎样才能使用“多”字;return";下面代码段中的语句?
在else条件下,我有两条语句要执行。第一个应该将我的计算附加到我的返回列表中,第二个应该再次调用我的递归过程。 问题是我的append过程被忽略了,所以我只是返回一个空列表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
(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)),当您返回它时,它当然是空的。它被定义为空,所以它保持为空。