СХЕМА :: R5RS Рекурсивная карта - PullRequest
0 голосов
/ 21 февраля 2020
;; 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

аргументы ...:

1 Ответ

0 голосов
/ 22 февраля 2020

Вопрос в закомментированном коде полностью отличается от процедуры, которую вы написали, он просит вас использовать 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, которая решает эту проблему, в частности, она будет go примерно такой:

(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)

Обратите внимание, что вам нужен только один параметр , список. На самом деле первоначальная ошибка в вопросе заключалась в том, что вы определили процедуру с двумя параметрами, но передали только один.

...