Функция, которая принимает список функций и возвращает список от применения каждой функции по очереди к списку аргументов? - PullRequest
1 голос
/ 23 сентября 2019

Так, например, учитывая

(lfmap '(f1 f2 f3) '(a1 a2 a3 a4)) 

, он должен возвращать что-то вроде оценки следующего ...

(
  (f1(f2(f3(a1))))
  (f1(f2(f3(a2))))
  (f1(f2(f3(a3))))
  (f1(f2(f3(a4))))
)

Примечание: вышеупомянутое не может бытьДействующая схема, но, надеюсь, сообщает о моих намерениях.Итак, как правильно это сделать?Я попробовал следующее ...

(define (lfmap lfunctions lvals)
    (define (_lfmap lfuncs val)
      (if (null? lfuncs) 
      acum 
      (_lfmap (cdr lfuncs) (apply (car lfuncs) val))))
  (map (lambda (x) (_lfmap lfunctions x)) lvals))

Но он даже не запускается ...

1 Ответ

0 голосов
/ 23 сентября 2019

Это можно сделать с помощью стандартной функции MAP, если вы просто скомпонуете функции вместо того, чтобы превратить их в список:

(map (compose f1 f2 f3) (list a1 a2 a3 a4))

Таким образом, вы можете определить свою функцию следующим образом:

(define (lfmap lfunctions lvals)
   (map (apply compose lfunctions) lvals))

Чтобы определить функцию compose, просто используйте рекурсию в списке функций с тождественной функцией (lambda (x) x) в качестве результата для базового случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...