确定在Haskell中的函数中执行的数学运算

时间:2018-09-15 12:21:05

标签: haskell

问题

我遇到了以下代码片段:

fun a b c d = let y   = a * b
                  f x = (x + y) `div` y
              in  f c + f d

fun 5 6 7 8的示例输出为2.5。 不幸的是,我至少有几分钟无法复制自己正在执行的数学运算。当我写这个问题时,我想出了解决方案:(我知道这确实很简单,但是我想与大家分享我的问题,以防有人遇到类似的问题。)

1 个答案:

答案 0 :(得分:2)

解决方案
很明显y = 5 * 6 = 30f x = (x + y) / yf c + f d的模式,即f c = ((c + y) / y) + f d = ((d + y) / y)

这就是为什么通过使用替换获得:

fun 5 6 7 8 = let y   = a * b          -- 5 * 6 = 30
                  f x = ((x + y) / y)  -- Pattern
              in f c + f d             -- ((7 + 30) / 30) + ((8 + 30) / 30) ≈ 2.5