Haskell F#是否具有多路if?

Haskell F#是否具有多路if?,haskell,if-statement,f#,pattern-matching,Haskell,If Statement,F#,Pattern Matching,有没有重构的方法: let collide (b1 : Box) (b2 : Box) = if bottom b1 > top b2 then false else if top b1 < bottom b2 then false else if right b1 < left b2 then false else if left b1 > right b2

有没有重构的方法:

let collide (b1 : Box) (b2 : Box) =
  if   bottom b1 > top b2
  then false
  else if   top b1 < bottom b2
       then false
       else if   right b1 < left b2
            then false
            else if   left b1 > right b2
                 then false
                 else true
让碰撞(b1:Box)(b2:Box)=
如果底部b1>顶部b2
那就错了
否则,如果顶部b1<底部b2
那就错了
否则,如果右b1<左b2
那就错了
否则,如果左b1>右b2
那就错了
否则是真的
以比这更具可读性的方式:

let collide (b1 : Box) (b2 : Box) =
  match () with
  | _ when bottom b1 > top    b2 -> false
  | _ when top    b1 < bottom b2 -> false
  | _ when right  b1 < left   b2 -> false
  | _ when left   b1 > right  b2 -> false
  | _                            -> true
让碰撞(b1:Box)(b2:Box)=
匹配
|_uu当底部b1>顶部b2->错误
|当顶部b1<底部b2->错误时
|当右b1<左b2->false时
|当左b1>右b2->false时
|_uu->true
?


我正在考虑类似于GHC 7.6.1中的多路if表达式:。

为什么不直接使用
|
-

not (bottom b1>topb2 || top b1<bottom b2 || right b1<left b2 || left b1>right b2)
不(底部b1>顶部b2 | |顶部b1
让碰撞(b1:Box)(b2:Box)=
如果底部b1>顶部b2,则为假
如果顶部b1<底部b2,则为假
如果右b1<左b2,则为假
如果左b1>右b2,则为假
否则是真的
作为补充,还值得指出的是,
elif
只是
的糖,如果
,则它只是
的糖。也就是说,您可以重新格式化原始代码,使其不那么糟糕:

let collide (b1 : Box) (b2 : Box) =
    if bottom b1 > top b2 then false
    else if top b1 < bottom b2 then false
    else if right b1 < left b2 then false
    else if left b1 > right b2 then false
    else true
让碰撞(b1:Box)(b2:Box)=
如果底部b1>顶部b2,则为假
否则,如果顶部b1<底部b2,则为假
否则,如果右b1<左b2,则为假
否则,如果左侧b1>右侧b2,则为false
否则是真的

我就是搞不懂:)如果不在某个地方添加一个否定词,这甚至等同于原始代码吗?@John:为了让你的表达式产生与原始代码片段等效的结果,你应该反转所有条件:
bottomb1@GeneBelitski否定整个表达式
not怎么样(底部…&&&…&&&……)
?@Cetin:
不是
真的:),与
(不是a)和&(不是b)
的等价物是
不是(a | | b)
我认为我现在所说的是正确的,但这说明了为什么我应该在写作之前多想想
let collide (b1 : Box) (b2 : Box) =
    if bottom b1 > top b2 then false
    else if top b1 < bottom b2 then false
    else if right b1 < left b2 then false
    else if left b1 > right b2 then false
    else true