Помогите в создании схемы map-many функции - PullRequest
1 голос
/ 20 мая 2011

Я должен определить функцию, которая принимает в качестве аргументов список функций и другой список и возвращает список значений, полученных путем последовательного применения всех функций к элементам списка.

Я придумала следующее, но получаю сообщение об ошибке:

+: expects type <number> as 1st argument, given: (1 2 3); other arguments were: 1

когда я пытаюсь использовать функцию с вводом сэмпла, (map-many (list (lambda (x) (+ x 1)) (lambda (x) (* x x))) '(1 2 3)). Мы ценим любые предложения.

(define (map-many fun-list lst)
    (if (null? lst) lst
        (map ((car fun-list) lst)
             (map-many (cdr fun-list) lst))))

Ответы [ 3 ]

2 голосов
/ 20 мая 2011
(define (map-many fun-list lst)
  (if (null? fun-list) lst
      (map (car fun-list)
           (map-many (cdr fun-list) lst))))

Ваши ошибки были:

  1. Вы заканчиваете свою рекурсию на (null? lst) вместо (null? fun-list).
  2. Остальная часть функции не была логичной.
1 голос
/ 20 мая 2011

Вы передаете неправильную функцию map.Вместо передачи ((car fun-list) lst), попробуйте передать только (car fun-list).

0 голосов
/ 20 мая 2011

Ваша формулировка немного неясна для меня.Вы должны сделать следующее?Есть два списка, одна из процедур (назовем этот список P), другая со значениями (назовем этот список V).Итак, вы ищете, чтобы найти список, где:

  • list-ref 0 = (P0 V0)
  • list-ref 1 = (P1 (P0 V1))
  • list-ref 2 = (P2 (P1 (P0 V2))

и так далее?

(define (map-many procs vals)
   (let ((applied (map (car procs) vals))
     (if (null? vals)
         vals
         (cons (car applied) (map-many (cdr procs) (cdr applied)))))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...