List 对Haskell列表的工作方式感到困惑
我是一名新程序员,正在使用Haskell。我发现了一行名为find的代码,它将一个字符串与其在列表中对应的一对匹配起来。像这样List 对Haskell列表的工作方式感到困惑,list,haskell,List,Haskell,我是一名新程序员,正在使用Haskell。我发现了一行名为find的代码,它将一个字符串与其在列表中对应的一对匹配起来。像这样 find a b = [x|(y,x) <- b, a==y] find a b=[x |(y,x)我会发出那种理解的声音 所有x的列表,使得(y,x)从b和a==y中提取 另一种更为顺序地阅读的方式: 从b中绘制一对(y,x)。对于每一对,检查a==y。如果是,则生成x;否则,继续下一对 我还应该注意到变量名有点混乱。在Haskell中,给出列表或其他容器的复
find a b = [x|(y,x) <- b, a==y]
find a b=[x |(y,x)我会发出那种理解的声音
所有x
的列表,使得(y,x)
从b
和a==y
中提取
另一种更为顺序地阅读的方式:
从b
中绘制一对(y,x)
。对于每一对,检查a==y
。如果是,则生成x
;否则,继续下一对
我还应该注意到变量名有点混乱。在Haskell中,给出列表或其他容器的复数名是惯用的。所以更像
find a abs = [x | (y, x) <- abs, a == y]
find a abs=[x |(y,x)你似乎将“x | x
”视为一件事。相反,列表理解是这样工作的:
[
表达式返回|
要迭代的内容]
您的示例基本上说的是“从b
中绘制(x,y)
,扔掉任何不满足a==y
,然后返回x
”。让我们给您一个示例,以便将其可视化:
find a b = [x|(y,x) <- b, a==y]
findab=[x |(y,x)