gpt4 book ai didi

具有两个变量的 Haskell 列表理解

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

我试图找到一些特殊的数字,这样当它除以 2 时得到 1,除以 3 得到 2 等等,直到 6。

这非常有效。

[ x | x <- [1..1000],x `mod` 2 == 1 , x `mod` 3 == 2 , x `mod` 4 == 3 , x `mod` 5 == 4 , x `mod` 6 == 5]

答:

[59,119,179,239,299,359,419,479,539,599,659,719,779,839,899,959]

我正在努力使其变得更好,以便它不会太冗长,但以下内容不起作用。

[ x | x <- [1..1000], y <- [2..6], x `mod` y == (y-1) ]

它需要所有x,其中任何 y 都满足条件,但我想要的是,我想要x 满足所有 y 的条件。

最佳答案

列表理解很短,但通常很晦涩。编写/读取一元代码通常更容易。让我们翻译第一个版本

do
x <- [1..1000] -- here a value is selected
guard $ x `mod` 2 == 1 -- it checked
guard $ x `mod` 3 == 2 -- and checked
guard $ x `mod` 4 == 3
guard $ x `mod` 5 == 4
guard $ x `mod` 6 == 5 -- you got the point
return x -- value returned

第二个是

do
x <- [1..1000] -- value selected
y <- [2..6] -- another value selected
guard $ x `mod` y == (y-1) -- the pair of previously selected values is checked
return x -- and now the first value returned.

===

第二个正确的写法:

do
x <- [1..1000]
guard $ and $ do
y <- [2..6]
return $ x `mod` y == 1
return x

它可以通过多种方式重写,包括

[x | x <- [1..1000], and [x `mod` y == 1 | y <- [2..6] ] ]

关于具有两个变量的 Haskell 列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11400156/

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