gpt4 book ai didi

haskell - 使用 let 和 show 在 haskell 中进行列表理解,它有什么用?

转载 作者:行者123 更新时间:2023-12-04 22:55:13 25 4
gpt4 key购买 nike

我正在研究项目 euler 解决方案,这是问题 4 的解决方案,它要求

Find the largest palindrome made from the product of two 3-digit numbers


problem_4 =
maximum [x | y<-[100..999], z<-[y..999], let x=y*z, let s=show x, s==reverse s]

我知道这段代码创建了一个列表,使得 x是所有可能的产物 zy .

但是我在理解 s 是什么时遇到了问题在这里做。看起来像 | 之后的一切每次需要此列表中的新元素时都会执行,对吗?

我想我不明白这里发生了什么。不应该在 | 的右边是约束?

最佳答案

列表推导式是对 do 的一个相当薄的包装。表达:

problem_4 = maximum $ do
y <- [100..999]
z <- [y..999]
let x = y*z
let s = show x
guard $ s == reverse s
return x

大多数作品直接翻译;不是迭代器 ( <- ) 或 let 的部分表达式被视为 guard 的参数在 Control.Monad 中找到的函数. guard的效果是短路评估;对于列表 monad,这意味着不执行 return x对于 x 的特定值这导致了错误的论点。

关于haskell - 使用 let 和 show 在 haskell 中进行列表理解,它有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50400691/

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