繁体   English   中英

球拍递归

[英]Racket recursion

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

我定义了一个函数drop-divisible,它接受一个数字和一个数字列表,然后返回一个新列表,该列表仅包含那些不能被数字“不可平分”的数字。 此功能不是问题,它可以工作。 所以我要麻烦的是将要调用此函数的函数及其本身。

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

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

您需要使用尾递归

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM