二次根的OCaml局部应用
我在读杰森·希基的书,我正在做一个练习。 我想我理解这个例子,但我不知道如何编写一个函数二次根的OCaml局部应用,ocaml,Ocaml,我在读杰森·希基的书,我正在做一个练习。 我想我理解这个例子,但我不知道如何编写一个函数rabc,它可以通过定义r来预先计算b和c的固定值,比如: 让r b c a= (*...*) 第二,我不知道只有b和c可以预先计算出什么东西。。。这里最复杂的部分是求b*的平方根。b-。4. *. a*。c,没有a我无法计算这个问题有两个方面,一部分是关于数学,一部分是关于部分应用(双关语) 当c等于零时,有一个值的判别公式变得微不足道。因此,我们可以为其提供一个高效的实施方案 let discrimi
rabc
,它可以通过定义r
来预先计算b
和c
的固定值,比如:
让r b c a=
(*...*)
第二,我不知道只有
b
和c
可以预先计算出什么东西。。。这里最复杂的部分是求b*的平方根。b-。4. *. a*。c
,没有a我无法计算这个问题有两个方面,一部分是关于数学,一部分是关于部分应用(双关语)
当c
等于零时,有一个值的判别公式变得微不足道。因此,我们可以为其提供一个高效的实施方案
let discriminant_for_c = function
| 0 -> fun b a _ -> a *. b /. 2.
| n -> general_discriminant
let r b c a = (discriminant_for_c c) b c a
然而,经过再三思考,我相信这是练习中的一个输入错误,是b
变量固定了。事实上,使用固定的b
我们有更多有趣的解决方案。并将其作为您的练习:)
此外,除了本练习的教学目的外,请记住,在实际应用中,计算判别式通常不是一个好主意,因为计算二次方程更准确、更稳定。您可以计算根的某些项,而无需
a
。例如,b*b
或4*c
是常数,如果b
和c
是绑定的。@理查德·德根:是的,但是sqrt和除法花费了太多时间,预先计算一次加法和一次乘法不会改变计时。我也找不到这个练习的答案……我不确定这里的目标是在时间方面提供一个有效的程序,而是能够识别不依赖于给定变量的表达式的子部分。我想Richard Degenne的评论就是你想要的是的,这个练习没有经过很好的思考。他们很容易就能想出更好的部分应用例子,imho。