gpt4 book ai didi

Haskell:脱糖列表理解

转载 作者:行者123 更新时间:2023-12-02 00:36:13 25 4
gpt4 key购买 nike

如何脱糖

λ: [[b|(a,b)<-[(1,"A"),(2,"B")], mod x 2 == 0]|x <- [1..10]]
[[],["A","B"],[],["A","B"],[],["A","B"],[],["A","B"],[],["A","B"]]

我试过了

do 
x <- [1..10]
do
(a,b) <- [(1,"A"),(2,"B")]
guard $ mod x 2 == 0
return b

但这似乎会自动加入结果。

["A","B","A","B","A","B","A","B","A","B"]

最佳答案

记住嵌套的 do 构造“collapse”:

do
A
do B
C

相同
do
A
B
C

(或者更准确地说,多行 do 构造将嵌套的 do 构造脱糖。)因此您希望构造子列表并将其添加到外部列表,而不是而不是使用嵌套的 do 构造来填充它来构建单个列表。

使用混合的中间方法,您通过分别返回每个内部列表来构建外部列表。

do
x <- [1..10]
return [[b|(a,b)<-[(1,"A"),(2,"B")], mod x 2 == 0]

然后你将那个理解脱糖:

do
x <- [1..10]
return (do
(a, b) <- ...
guard $ mod x 2 == 0
return b)

关于Haskell:脱糖列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com