用F#计算三角形

用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.

我想写一个程序来计算三角形。有人能给我一个简短的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 = (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。这是我的解决方案。非常感谢古斯塔沃。这接近我的解决方案。