簡體   English   中英

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 ,該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)

請注意,您只需要一個參數,即列表。 事實上,問題中的原始錯誤是因為您定義了一個帶有兩個參數的過程,但您只傳遞了一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM