Композиция многомерных функций - PullRequest
0 голосов
/ 22 ноября 2018

Давайте рассмотрим следующее:

f: Int -> Int -> Int -> Int
f a b c = a + b + c

g: Int -> Int
g x = x * 2

Теперь я хотел бы создать составную функцию, такую ​​как

f(g(a), g(b), g(c))

, как использовать << и >> операторы длядостичь этого?Можно ли вообще составить многовариантные функции?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

как использовать операторы << и >> для этого?Можно ли даже составить многовариантные функции?

Да, легко:

h = flip flip g << ((<<) (<<)) << ((>>) g) << f << g

h - это <function> : number -> number -> number -> number, что совпадает с h a b c = f (g a) (g b) (g c).

Я думаю, нам не нужно копаться в правильности, поскольку очевидно, что версия с аргументами гораздо более читаема.

0 голосов
/ 22 ноября 2018

Многовариантности на самом деле не существует в Elm.Лучшее, что я могу предложить, это

f : Int -> Int -> Int -> Int
f a b c =
    [ a, b, c ] |> List.map ((<|) g) |> List.sum


g : Int -> Int
g x =
    x * 2

Обратите внимание, что у вас произошла ошибка в сигнатуре типа для g

...