我有一个关于 Haskell 的快速问题。我一直在关注Learn You a Haskell,并且对以下代码段的执行顺序/逻辑有点困惑,用于计算三角形的边长,当所有边都等于或小于 10 并且三角形的总周长为 24:
[(a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2, a+b+c==24]
令我困惑的部分是b
anda
绑定的上扩展界限。根据我的收集,..c
and..b
用于删除同一组三角形边的其他排列(组合?)。
当我用 运行它时..c/b
,我得到了答案:
[(6,8,10)]
当我没有..c/b
:
[(a,b,c) | c <- [1..10], b <- [1..10], a <- [1..10], a^2 + b^2 == c^2, a+b+c==24]
正如我最初输入时没有那样,我得到:
[(8,6,10),(6,8,10)]
这显然代表同一个三角形,除了a
和b
值已交换。
那么,有人可以带我了解这里发生的事情的逻辑/执行/评估吗?