SCHEME::R5RS 使用地图递归
SCHEME::R5RS Recursive using map
;; 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
参数...:
评论代码中的问题与您编写的过程完全不同,它要求您使用 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)
请注意,您只需要一个参数,即列表。事实上,问题中最初的错误是因为你定义了一个有两个参数的过程,但你只传递了一个。
;; 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
参数...:
评论代码中的问题与您编写的过程完全不同,它要求您使用 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)
请注意,您只需要一个参数,即列表。事实上,问题中最初的错误是因为你定义了一个有两个参数的过程,但你只传递了一个。