所以我刚开始学习Haskell(从星期六开始),我从在线书籍中读了几章,然后我写了一个列表理解,找到圆周的直径。
ghci> let circle = [(a) | a <- [1..10], 9 / pi == a]
但它返回[]
我被告知这是因为[1..10]
只计算整数而不是1到10之间的所有实数。
我尝试ghci> let circle = [(a) | a <- [1..10], round (pi * a) == 9]
返回[3.0]
,但我想知道是否有办法获得更准确的答案。
提前致谢。
答案 0 :(得分:6)
欢迎使用Haskell和StackOverflow!
let circle = [(a) | a <- [1..10], 9 / pi == a]
考虑到1到10之间的所有实数都是uncountably infinite set(对于那个人来说,给Georg Cantor一个小贴士),至少可以说,如果你设法对它们进行列表理解,我会感到惊讶。 :)
关于此列表为空的原因是正确的 - 9/pi
永远不会等于整数。
除此之外,没有理由对此使用列表理解。你可以通过简单地用pi分开来做同样的事情:
let diam c = c / pi
答案 1 :(得分:3)
这不是列表推导的用途。要获得9 / pi
的准确答案,请直接计算9 / pi
。
ghci> let diam = 9/pi
答案 2 :(得分:1)
diameter c = c / pi
或者当你在Haskell中获得更高级时:
diameter = (/ pi)
然后你可以打电话:
Prelude> diameter 9
2.864788975654116
如果你想要圆周的直径从1到10,列表理解可能会很有用,如下所示:
Prelude> [diameter x | x <- [1..10]]
[0.3183098861837907,0.6366197723675814,0.954929658551372,1.2732395447351628,1.5915494309189535,1.909859317102744,2.228169203286535,2.5464790894703255,2.864788975654116,3.183098861837907]
答案 3 :(得分:1)
怎么样:
let circle = [ 9 / pi ]
答案 4 :(得分:1)
为什么不找到给定周长的圆的直径?
diameterOfCircleWithCircumference :: Floating a => a -> a
diameterOfCircleWithCircumference = (/ pi)
然后diameterOfCircleWithCircumference 9
是2.8947 ...