Я знаю, что (.) f g x = f (g x)
. Предположим, что f
имеет тип Int -> Int
, g
имеет тип Int -> Int -> Int
. Теперь пусть h
будет определяться h x y = f (g x y).
Какое из следующих утверждений истинно и почему (почему бы и нет)?Смущенный функциональный состав в Haskell
a. h = f . g
b. h x = f . (g x)
c. h x y = (f . g) x y
Предположительно, только b. это правда, а остальные ложны. Я бы подумал. и b. эквивалентны ... a. говорит, что две функции равны. Две функции равны только тогда, когда я добавляю аргумент в конец обеих сторон, он все равно будет равен. Поэтому я получаю h x = f . g x
. Теперь (.)
является оператором, поэтому функциональное приложение имеет приоритет над ним, поэтому f . g x = f . (g x)
, что и b.
Я что-то упустил? Если 'g' имеет тип' Int-> Int-> Int', то 'g x' имеет тип' Int-> Int', а 'f (g x)' - ошибка типа. – Joni
Возможно, вы имели в виду, что 'h' определяется' h x y = f (g x y) '? – AndrewC
BTW, добро пожаловать в переполнение стека! Это часто помогает, если вы некоторое время болтаете, прося отвечать на комментарии, так как это ускоряет работу. По общему признанию, мы не очень быстро реагировали на этот раз. – AndrewC