W pierwszej części ta procedura zastosuje listę funkcji do pojedynczego argumentu, przy założeniu, że wszystkie funkcje otrzymują tylko jeden argument. Lista z wynikami jest zwracana
(define (apply-function-list flist element)
(map (lambda (f)
(f element))
flist))
Dla drugiej części, znalezienie maksimum na liście jest dość proste. Na przykład, jeśli element jest 2
i lista funkcji jest (list sin cos sqr sqrt)
:
(apply max
(apply-function-list (list sin cos sqr sqrt) 2))
EDIT:
Oto kolejna z możliwych rozwiązań, bez użycia apply
i w ramach jednej procedury:
(define (max-list-function flist element)
(foldr max -inf.0
(map (lambda (f) (f element))
flist)))
Użyj tego w następujący sposób:
(max-list-function (list sin cos sqr sqrt) 2)
Ach dziękuję panu. To by to zrobiło. Nie nauczyłem się jednak stosować, więc będę przeprowadzał więcej badań z mojej strony. Dzięki! –
Zastosowanie jest przydatne do wywoływania funkcji z listą argumentów. Na przykład (zastosuj + (lista 3 4 5)) tworzy 12. Często zdarza się, że zastosowanie może zostać zastąpione użyciem krotności; w tym przypadku foldr1 lub foldl1. Jest to przydatne w językach, które nie mają "zastosowania", ponieważ foldl1 i foldr1 są "zwykłymi" funkcjami, które można zdefiniować w dowolnym języku (no, właściwie w każdym języku). –
@John Co to jest foldl1 i foldr1? Nie widzę odniesienia do nich na docs.racket-lang ... czy jest coś takiego jak zredukowanie srfi/1? –