在我的else条件下,我有两个要执行的语句。第一个应该将我的计算结果添加到返回列表中,第二个应该再次调用递归过程。 问题是我的添加过程被忽略了,所以我只是返回一个空列表。
(define (calcit x lst)
(cond ((= x 0)
retlst)
(else (append (list (floor (/ x (first lst)))) retlst)
(calcit (modulo x (first lst)) (rest lst)))))
答案 0 :(得分:1)
您需要对正在创建的数据进行处理。您可能希望让第一个元素在从递归中获得的列表结果中被限制:
(define (calcit x lst)
(if (= x 0)
'() ;; base case
(cons (floor (/ x (first lst)))
(calcit (modulo x (first lst)) (rest lst)))))
在带有递归的Scheme中创建列表时,请尝试避免使用append
。使用append
是一种反模式。了解Scheme清单是如何工作的,并进行培训以密切了解它。例如'((2 3) (4 5))
,如果我问您如何从中获得5
,您应该立即考虑并立即回答cadadr
。