【问题标题】:line line intersection fsharp线 线 交点 fsharp
【发布时间】:2015-10-04 08:36:02
【问题描述】:

我在编写线-线相交函数时遇到问题。这是我目前所拥有的:

type Line = float*float

let LinesIntersection x y = 
    if x.a <> y.a then 
        Some ((x.b - y.b)/(y.a - x.a), (y.a*x.b - x.a*y.b)/(y.a - x.a))
    else None

let l1 = (2.0,-3.0)
let l2 = (-3.0, 2.0)
let l3 = (2.0, 4.0)

LinesIntersection l1 l2 |> printfn "%A"
LinesIntersection l1 l3 |> printfn "%A"

输出:

stdin(73,19): error FS0001: This expression was expected to have type
Line    
but here has type
    float * float  

有什么帮助吗?

【问题讨论】:

  • 你在期待什么,例如x.a 做什么?元组没有a 成员...
  • 他们可能想要将 Line 声明更改为 type Line = { a: float; b: float} 并相应地将 l1 设置为 l3:let l1 = { a=2.0; b= -3.0 }
  • 我正在尝试获取作为元组返回的值
  • 投反对票。抱歉,您从 stackoverflow.com/questions/32683811/… 获取代码并更改行 Type = {a:double; b:double} 类型 line = float*float。你甚至没有尝试自己做某事。究竟是什么问题?你已经几乎拥有一切

标签: f# f#-interactive f#-3.0


【解决方案1】:

使用这个:

type Line = {a:float; b:float}

let LinesIntersection x y = 
    if x.a <> y.a then 
        Some ((x.b - y.b)/(y.a - x.a), (y.a*x.b - x.a*y.b)/(y.a - x.a))
    else None

let l1 = {a=2.0; b=3.0}
let l2 = {a= -3.0; b=2.0}
let l3 = {a=2.0; b=4.0}

LinesIntersection l1 l2 |> printfn "%A"
LinesIntersection l1 l3 |> printfn "%A"

【讨论】:

  • 如果没有LinesIntersection 上的类型注释或xy 上的模式匹配,我认为这将无法工作。
  • 运行它,你会看到它给出了Some (-0.2, 2.6) &lt;null&gt;
猜你喜欢
  • 2010-10-24
  • 2015-07-03
  • 1970-01-01
  • 2012-10-14
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多