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