Haskell并行广义(类SQL)列表理解问题

Haskell并行广义(类SQL)列表理解问题,haskell,syntax,list-comprehension,Haskell,Syntax,List Comprehension,也许我误读了docs(),但在下面的代码中,我希望列表理解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)

也许我误读了docs(),但在下面的代码中,我希望列表理解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'

谢谢。

看来索利泽的评论是正确的。第一个结果是,条形图的关联比逗号更松散。这记录在dons的“平行列表理解”部分下的链接中。不知道该怎么办

下面的代码非常难看(重复了(x,y)的绑定),但顺便说一句,修复了solrize的语法错误

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

Dons,谢谢,现在我不确定我做了什么才得到了正确的输出。是的,我的注释中的代码是一个语法错误(我无法修复它或在那里注释,因为我已经没有浏览器cookie了,唉)。我看不出有什么办法可以解决这个问题,除了“zip”,这有点令人失望,但好吧。(哦,看起来我可以将编辑放入队列,这与mathoverflow不同)。

对我来说像个bug。这至少是因为没有清楚地传达句法翻译是什么。solrize的链接状态:

给出对表格的平行理解:

这就意味着

-- this produces the same result as your zs'
[ (x,y) | (x,y) <- zip [x' | x' <- xs]
                       [y' | y' <- ys]
                       , then sortWith by y ]
--这将产生与zs相同的结果

[(x,y)|(x,y)嗯,
zs=[(x,y)| xDoesn您评论中的版本没有语法错误吗?至少,它失败了,或者是我。对于那些不熟悉此扩展的人,这里描述了:为什么直觉会将
sortWith
放在最后的省略号中?语法示例清楚地表明,
@sclv对我来说更紧密地绑定到语法x看起来只是
x形式的表达式。括号中的
|
表达式也正是我在调查我的答案时理想化的表达式。当然,将它们分组的简单方法就是使用
zip
和朋友,如
zs'
zs = [(x,y) | (x<-xs | y<-ys), then sortWith by y]
[ 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, ...] 
                                      ... 
[ (x,y) | x <- xs
        | y <- ys
        , then sortWith by y ]
-- this produces the same result as your zs'
[ (x,y) | (x,y) <- zip [x' | x' <- xs]
                       [y' | y' <- ys]
                       , then sortWith by y ]
[ (x,y) | x <- xs
        | y <- ys, then sortWith by y
        ]
-- this produces the same result as your zs
[ (x,y) | (x,y) <- zip [x' | x' <- xs]
                       [y' | y' <- ys, then sortWith by y']
                       ]