Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二次根的OCaml局部应用_Ocaml - Fatal编程技术网

二次根的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。