也许我误读了文档( http://www.haskell.org/ghc/docs/7.0.1/html/users_guide/syntax-extns.html#parallel-list-comprehensions ),但在下面的代码中,我希望列表推导式 zs 和 zs' 具有相同的值。但是,它们是不同的,如主要打印两条不同的行所示:

{-# LANGUAGE ParallelListComp, TransformListComp #-}
import GHC.Exts

xs = [10,20..90]
ys = map (`mod`7) xs

zs = [(x,y) | x<-xs | y<-ys, then sortWith by y]
zs' = [(x,y) | (x,y) <- zip xs ys, then sortWith by y]

main = print zs >> print zs'

我只是误读了文档,还是有更严重的问题?我很惊讶类型系统没有在从中抽象出的实际代码中捕获错误。

产生此输出:
*Main> main
[(10,0),(20,1),(30,2),(40,3),(50,3),(60,4),(70,5),(80,6),(90,6)]
[(70,0),(50,1),(30,2),(10,3),(80,3),(60,4),(40,5),(20,6),(90,6)]

谢谢。

最佳答案

唐斯,谢谢,现在我不确定我做了什么才能产生正确的输出。是的,我评论中的代码是一个语法错误(我无法修复它或在那里发表评论,因为我不再拥有浏览器 cookie,叹气)。除了使用“zip”之外,我看不到任何解决此问题的方法,这有点令人失望,但是很好。 (哦,看起来我可以将编辑放入队列,与 mathoverflow 不同)。

关于Haskell 并行和广义(类 SQL)列表理解问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5943641/

10-11 22:34