问题
我遇到了以下代码片段:
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
。
不幸的是,我至少有几分钟无法复制自己正在执行的数学运算。当我写这个问题时,我想出了解决方案:(我知道这确实很简单,但是我想与大家分享我的问题,以防有人遇到类似的问题。)
答案 0 :(得分:2)
解决方案
很明显y = 5 * 6 = 30
和f x = (x + y) / y
是f 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