用F#计算三角形
我想写一个程序来计算三角形。有人能给我一个简短的F#sharp代码来进行这个计算吗 到目前为止,这就是我所拥有的,但我不认为这是最好的方式:用F#计算三角形,f#,geometry,F#,Geometry,我想写一个程序来计算三角形。有人能给我一个简短的F#sharp代码来进行这个计算吗 到目前为止,这就是我所拥有的,但我不认为这是最好的方式: let area a b c = let s = sqrt((a + b + c) / 2) sqrt(s * (s - a) * (s - b) * (s - c)) 只是那些公式的翻译? 应该是这样的: let area a = (a ** 2. / 4.) * sqrt 3. let area' a b = a * b / 2.
let area a b c =
let s = sqrt((a + b + c) / 2)
sqrt(s * (s - a) * (s - b) * (s - c))
只是那些公式的翻译? 应该是这样的:
let area a = (a ** 2. / 4.) * sqrt 3.
let area' a b = a * b / 2.
let area'' a b c =
let s = (a + b + c) / 2.
sqrt(s * (s - a) * (s - b) * (s - c))
只是那些公式的翻译? 应该是这样的:
let area a = (a ** 2. / 4.) * sqrt 3.
let area' a b = a * b / 2.
let area'' a b c =
let s = (a + b + c) / 2.
sqrt(s * (s - a) * (s - b) * (s - c))
看起来你正试图根据三角形的类型应用不同的公式。如果你有三条边,如果你有一条边,你假设三角形是等边的,如果你有两条边,你假设三角形是对的,两条边是正的。 如果我的解释正确,我会定义一个歧视性的联盟,如下所示:
type Triangle =
| Generic of float * float * float
| Equilateral of float
| Right of float * float
let area (t : Triangle) : float =
match t with
| Generic (a, b, c) -> let s = (a + b + c) / 2.
sqrt(s*(s-a)*(s-b)*(s-c))
| Equilateral a -> sqrt(3.) * (a ** 2.) / 4.
| Right (a, b) -> (a * b) / 2.
// testing
let triangles = [Generic (2., 3., 4.); Equilateral 2.; Right (2., 3.)]
triangles |>
List.iter (fun t -> Console.WriteLine(area t))
看起来你正试图根据三角形的类型应用不同的公式。如果你有三条边,如果你有一条边,你假设三角形是等边的,如果你有两条边,你假设三角形是对的,两条边是正的。 如果我的解释正确,我会定义一个歧视性的联盟,如下所示:
type Triangle =
| Generic of float * float * float
| Equilateral of float
| Right of float * float
let area (t : Triangle) : float =
match t with
| Generic (a, b, c) -> let s = (a + b + c) / 2.
sqrt(s*(s-a)*(s-b)*(s-c))
| Equilateral a -> sqrt(3.) * (a ** 2.) / 4.
| Right (a, b) -> (a * b) / 2.
// testing
let triangles = [Generic (2., 3., 4.); Equilateral 2.; Right (2., 3.)]
triangles |>
List.iter (fun t -> Console.WriteLine(area t))
不,不是作业。我自己也在尝试,但我不确定这是不是最好的解决方案<代码>代码你几乎是对的。当计算
s
时,移除sqrt
:让区域a b c=let s=(a+b+c)/2.0在sqrt(s*(s-a)*(s-b)*(s-c))
如果你展示了你在问题中的尝试,你会得到更好的回答(即不关闭),否则它读起来有点像家庭作业或“给我一个密码”,因为问题已经被编辑以添加一些代码,应该重新打开。不,不是家庭作业。我自己也在尝试,但我不确定这是不是最好的解决方案<代码>代码你几乎是对的。当计算s
时,移除sqrt
:让区域a b c=let s=(a+b+c)/2.0在sqrt(s*(s-a)*(s-b)*(s-c))
如果你展示了你在问题中的尝试,你会得到更好的回答(即不关闭),否则它读起来有点像家庭作业或“给我一个密码”,因为问题已经被编辑以添加一些代码,应该重新打开。非常感谢Gustavo。这是我的解决方案。非常感谢古斯塔沃。这接近我的解决方案。