Spec-Zone.ru › Haskell 9

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

ParallelListComp
Since:

6.8.1

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

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

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

[ (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.12.1/docs/users_guide/exts/parallel_list_comprehensions.html

Spec-Zone.ru

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