【问题标题】:Racket recursion球拍递归
【发布时间】:2017-09-18 17:10:23
【问题描述】:

我是 Racket 的新手,我正在尝试定义一个函数,该函数接受一个除数列表和一个数字列表进行测试,并对列表中的每个元素应用直接递归和一个函数“drop-divisible”的除数。

我定义了一个 drop-divisible 函数,它接受一个数字和一个数字列表,并返回一个新列表,其中仅包含那些不能被该数字“非平凡整除”的数字。这个功能不是问题,它有效。所以我遇到的麻烦是要调用这个函数的函数,以及它本身。

这是我想出的。我可以想象这远非正确,但我不知道该怎么做。

(define (sieve-with divisors testlist)
  (if (null? divisors)
      '()
      (begin
        (drop-divisible (first divisors) testlist)
              (sieve-with (rest divisors) testlist))))

【问题讨论】:

    标签: recursion racket


    【解决方案1】:

    你需要使用tail recursion:

    (define (sieve-with divisors list)
        (cond [(empty? divisors) list]
              [else (sieve-with (rest divisors)
                                (drop-divisible (first divisors) list))]))
    

    另外,尽可能远离begin。坚持功能范式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-07
      • 2013-09-24
      • 2015-04-17
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      相关资源
      最近更新 更多