作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 http://learnyouahaskell.com/starting-out 上的(优秀的)Haskell 教程。并且正在尝试直角三角形示例:
> let triangles = [(a,b,c) | c <- [1..10], b <- [1..10], a <- [1..10], a^2 + b^2 == c^2]
> triangles
[(4,3,5),(3,4,5),(8,6,10),(6,8,10)]
> let triangles = [(a,b,c) | c <- [1..], b <- [1..], a <- [1..], a^2 + b^2 == c^2]
> take 2 triangles
最佳答案
好吧,懒惰不是这里的问题。这是您在列表中迭代变量的顺序。
基本上发生的事情是:
a
的值。 ,因为它不知道您需要停止并增加
b
或
c
改变。
triplesN :: Int -> [(Int, Int, Int)]
triplesN n = [(i, j, n - i - j) | i <- [1..n - 2],
j <- [1..n - i - 1], i>=j,
let k = n - i - j, j>=k]
isTriangle (a, b, c) = a^2 == b^2 + c^2
triangles = filter isTriangle $ concatMap triplesN [1..]
tripleN
生成总和
n
的所有有序三元组.通过将此函数映射到所有自然数上,我们实际上得到了所有有序对的流。最后,我们只过滤那些三角形的三元组。
take 10 triangles
[(5,4,3),(10,8,6),(13,12,5),(15,12,9),(17,15,8),(20,16,12),(25,24,7),(25,20,15),(26,24,10),(29,21,20)]
关于haskell - 查找直角三角形时如何使用 Haskells 惰性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13396307/
目标:给定三个 (x,y) 坐标,判断三角形是锐角三角形、钝角三角形、直角三角形还是不能组成三角形。当我为锐角三角做好准备时,我的问题就开始了。按照我输入的方式,该程序不会比锐角三角形更进一步。总之,
只是为了好玩,我正在尝试创建一个非 Flash 版本的 http://www.jurjans.lv/stuff/net/FreeNet.htm .这些都是非常简单的东西,但我在精神上一直纠结于如何生成
我是一名优秀的程序员,十分优秀!