部分应用程序预先计算中间结果

时间:2012-12-05 17:14:33

标签: functional-programming ocaml

对于以下的除法公式,我有多个afixed bc

enter image description here

我希望编写一个有效执行的partial application函数,即我的函数不会重新计算固定值(因为bc)。


这是我的解决方案

let r b c = let z = b *. b in fun a -> (-.b +. sqrt (z-.4.0*.a*.c))/.(a*.2.0);;

我想这个解决方案可行,但我不确定它是否足够有效。我刚刚修改b^2,因为我看到其他部分都是a

任何人都可以给我一个更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

是的,这是处理手头情况的正确方法。 alternate form没有多大帮助(只要获得所需的准确度)。您可能还想将4*c移出,

let r b c = let z = b *. b and c4 = 4.0 *. c in
            fun a -> (-.b +. sqrt (z-.a*.c4))/.(a*.2.0);;