Для первой части эта процедура будет применять список функций к одному аргументу, предполагая, что все функции получают только один аргумент. A список с результатами возвращается
(define (apply-function-list flist element)
(map (lambda (f)
(f element))
flist))
Для второй части найти максимум в списке достаточно просто. Например, если элемент является 2
и перечень функций (list sin cos sqr sqrt)
:
(apply max
(apply-function-list (list sin cos sqr sqrt) 2))
РЕДАКТИРОВАТЬ:
Вот еще один из возможных решений, без использования apply
и в одной процедуре:
(define (max-list-function flist element)
(foldr max -inf.0
(map (lambda (f) (f element))
flist)))
Используйте его следующим образом:
(max-list-function (list sin cos sqr sqrt) 2)
Ах спасибо, сэр. Это сделало бы это. Я еще не научился применять, поэтому я буду делать больше исследований с моей стороны. Благодаря! –
Применить полезно для вызова функции со списком аргументов. Так, например, (apply + (list 3 4 5)) производит 12. Часто бывает, что применение может быть заменено на использование fold; в этом случае foldr1 или foldl1. Это полезно на языках, которые не имеют «применять», поскольку foldl1 и foldr1 являются «регулярными» функциями, которые могут быть определены на любом языке (ну, почти любой язык). –
@John Что такое foldl1 и foldr1? Я не вижу ссылки на них на docs.racket-lang ... это что-то вроде сокращения srfi/1? –