在下面的代码中,我如何使用“ return”语句以外的内容?

时间:2019-04-26 15:15:11

标签: racket

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

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

1 个答案:

答案 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