#haskell #syntax
#haskell #синтаксис
Вопрос:
Какие из приведенных ниже типов являются одним и тем же типом:
i. a -> b -> c -> d
ii. (a -> b) -> c -> d
iii. a -> (b -> c) -> d
iv. a -> b -> (c -> d)
v. (a -> b) -> (c -> d)
vi. ((a -> b) -> c) -> d
vii. a -> (b -> (c -> d))
(b) В следующих терминах, каковы типы функций f, учитывая, что x, y, z:: Integer:
i. (f x) (y, z)
ii. f x y z
iii. f (x, y, z)
iv. f (x,(y, z))
(c) Укажите типы следующих терминов (если они действительно вводятся) и укажите, какие из них равны:
i. «abcd»
ii. [(’a’,’b’),(’c’,’d’)]
iii. (’a’:[’b’]):(’c’: [’d’])
iv. ’a’:(’b’:’c’: ’d’:[])
v. [«ab», «cd»]
Я не ищу решения, но мне нужна помощь в понимании использования () и его значения. Спасибо.
Ответ №1:
В типах ->
ассоциируется с правом, т.е. a -> b -> c
фактически означает a -> (b -> c)
. Это функция , которая принимает аргумент типа a
и возвращает функцию типа b -> c
.
Для сравнения, (a -> b) -> c
это функция, которая принимает в качестве аргумента функцию типа a -> b
и возвращает значение типа c
.
Вот несколько примеров
foo :: Int -> Bool -> String
-- the same as foo :: Int -> (Bool -> String)
-- takes Int, returns function
foo n = b -> if b amp;amp; n> 5 then "some result" else "some other result"
bar :: (Int -> Bool) -> String
-- takes function, returns string
bar f = if f 43 then "hello" else "good morning"
-- bar can be called in this way
test :: String
test = bar (n -> n > 34) -- evaluates to "hello"
При вызове функции, как в f x y z
, приложение связывается слева, как в (((f x) y) z)
. Например, они эквивалентны:
foo 5 True
(foo 5) true
Напротив, (,,,,)
с запятыми внутри — это способ формирования кортежей, и он не связан с приложением. Следовательно, [(’a’,’b’),(’c’,’d’)]
это список пар. Вместо этого в вашем примере (’a’:[’b’]):(’c’:[’d’])
нет запятых, поэтому круглые скобки предназначены только для группировки, а выражение имеет то же значение
x : y
where x = 'a':['b']
y = 'c':['d']
Попробуйте подумать о том, какие типы должны x
и y
должны иметь, а затем подумайте о типе x : y
, если таковые имеются.