【问题标题】:SCHEME::R5RS Recursive using mapSCHEME::R5RS 递归使用地图
【发布时间】:2020-06-06 07:23:02
【问题描述】:
;; Write the code to fill in the missing part (???) of the below statement)
;;(map ??? (list 1 2 3 4 5 6 7 8 9 10)) => (2 4 6 16 10 36 14 64 18 100)
;; *2 ^2 *2 ^2
(define (mapp list item)
  (cond ((odd? (car item)) (* (car item) 2))
        (cons ((even? (car item)) (* (car item) (car item)))
              (mapp (list (cdr item))))))

(mapp (list 1 2 3 4 5 6 7 8 9 10))

你能帮我解决这个问题吗?谢谢

错误消息:
预期的参数数量与给定的数量不匹配

预计:2

给定:1

参数...:

【问题讨论】:

    标签: recursion scheme r5rs


    【解决方案1】:

    注释代码中的问题与您编写的过程完全不同,它要求您使用map 并传递一个lambda,它将产生一个如示例中所示的序列:

    (map (lambda (e)
           (if (odd? e) (* 2 e) (* e e)))
         (list 1 2 3 4 5 6 7 8 9 10))
    
    => '(2 4 6 16 10 36 14 64 18 100)
    

    如果你想实现mapp - 你自己的map 版本特别解决了这个问题,它会是这样的:

    (define (mapp lst)
      (cond ((null? lst) '())
            ((odd? (car lst))
             (cons (* 2 (car lst)) (mapp (cdr lst))))
            (else
             (cons (* (car lst) (car lst)) (mapp (cdr lst))))))
    
    (mapp (list 1 2 3 4 5 6 7 8 9 10))
    =>'(2 4 6 16 10 36 14 64 18 100)
    

    请注意,您只需要一个参数,即列表。事实上,问题中的原始错误是因为您定义了一个带有两个参数的过程,但您只传递了一个。

    【讨论】:

    • 非常感谢 :)
    猜你喜欢
    • 2011-07-28
    • 2015-03-24
    • 2019-11-16
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多