【问题标题】:Racket Recursive Square Function球拍递归平方函数
【发布时间】:2015-04-17 15:52:02
【问题描述】:

我正在尝试在球拍中编写一个函数,该函数接受一个数字列表并输出一个包含这些数字平方的列表。我试图不使用地图实现,而是递归地解决问题。但是,我现在拥有的代码正在输出与输入相同的列表。我的代码如下:

  (define (my-square lst)
         (cond (cons? lst)
               (append  (* (first lst) (first lst))  (my-square (rest lst)))))

感谢您的帮助!

【问题讨论】:

    标签: list recursion racket


    【解决方案1】:

    append应该是cons,当lst为空时你应该处理这种情况。最后,cond 条件应该用括号括起来:

    (define (my-square lst)
      (cond ((cons? lst) (cons (* (first lst) (first lst)) (my-square (rest lst))))
            (#t '())))
    

    【讨论】:

      【解决方案2】:

      基本情况是错误的(它应该要求空列表),cons 应该用于递归构建列表(而不是 append)。此外,您有几个关于括号的错误,cond 中的最后一个条件应使用else 指定。这是构建输出列表的标准模板:

      (define (my-square lst)
        (cond ((empty? lst)
               empty)
              (else
               (cons (* (first lst) (first lst))
                     (my-square (rest lst))))))
      

      这对于从头编写的解决方案来说很好,但在 Racket 中解决这个问题的惯用方法是使用高阶函数,例如 map - 所以我们不会重新发明轮子:

      (define (my-square lst)
        (map (lambda (x) (* x x)) lst))
      

      无论哪种方式,它都按预期工作:

      (my-square '(1 2 3 4 5))
      => '(1 4 9 16 25)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 2012-10-07
        • 2013-09-24
        • 2014-11-02
        相关资源
        最近更新 更多