Spec-Zone.ru › Haskell 9

6.2.6. Параллельные списковые включения

ParallelListComp
Подразумевается расширением:

MonadComprehensions

Начиная с:

6.8.1

Разрешает синтаксис параллельных списковых включений.

Параллельные списковые включения — естественное расширение списковых включений. Списковые включения можно рассматривать как удобный синтаксис для записи отображений и фильтров. Параллельные включения дополняют их семейством zipWith.

Параллельное списковое включение содержит несколько независимых ветвей списков квалификаторов, разделённых символом |. Например, следующий пример объединяет в пары элементы двух списков:

[ (x, y) | x <- xs | y <- ys ]

Поведение параллельных списковых включений соответствует поведению zip: результирующий список будет иметь ту же длину, что и самая короткая ветвь.

Параллельные списковые включения можно определить с помощью преобразования в обычные включения. Основная идея такова:

Пусть параллельное включение имеет следующий вид:

[ e | p1 <- e11, p2 <- e12, ...
    | q1 <- e21, q2 <- e22, ...
    ...
]

Оно будет преобразовано в:

[ e | ((p1,p2), (q1,q2), ...) <- zipN [(p1,p2) | p1 <- e11, p2 <- e12, ...]
                                      [(q1,q2) | q1 <- e21, q2 <- e22, ...]
                                      ...
]

где zipN — подходящий zip для заданного числа ветвей.

© 2002–2007 The University Court of the University of Glasgow. All rights reserved.
Licensed under the Glasgow Haskell Compiler License.
https://downloads.haskell.org/~ghc/9.14.1/docs/users_guide/exts/parallel_list_comprehensions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API