LINUX.ORG.RU

Листы в Haskell

 


0

0

Добрый день! Помогите, пожалуйста, разобраться, как что происходит при выполнении следующих операций (справа указан результат операции):

1) [x]:[] = [[x]]

2) [x]:[y] = ERROR

3) [x]:[[y]] = [[x],[y]]

Почему первая операция дает нам двумерный список, а вторая выдает ошибку (а не двумерный список)? И как понимать 3) операцию?

первая операция

вторая

3) операци

хинт: это всё одна и та же операция

хинт 2: элементы списка в хаскелле должны иметь один тип

хинт 3: x:[y] = [x, y]

MyTrooName ★★★★★
()
  1. операция (:) имеет тип a -> [a] -> [a], в данном случае a = [b], поэтому (:) :: [b] -> [[b]] -> [[b]]. [x] :: [b], пустой список [] :: [[b]], всё в порядке
  2. [x] :: [b], [y] :: [b], ошибка типизации, так как (:) :: [b] -> [[b]] -> [[b]]
  3. Ты добавляешь к списку [[y]], состоящему из одного элемента [y], ещё один элемент [x]
Crocodoom ★★★★★
()

В следующий раз в Development c такими вопросами.

Metaeblanuje
()

Также обрати внимание на операцию конкатенации (++), у неё другой тип (++) :: [a] -> [a] -> [a], возможно она покажется тебе удобнее.

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

Спасибо большое! Помогли разобраться!

glycine
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.