2012-07-23 10 views

Trả lời

23

mô hình này có thể được mô phỏng với một chức năng - ví dụ, cond từ Control.Conditional:

signum x = cond [(x > 0  , 1) 
       ,(x < 0  , -1) 
       ,(otherwise , 0)] 

Tôi không thể gọi nó là đặc biệt xinh đẹp, mặc dù.


Trong GHC tiếp theo chúng tôi will be able to use multi-way if, hooray! (chỉ cần tìm ra)

f t x = if | l <- length t, l > 2, l < 5 -> "length is 3 or 4" 
      | Just y <- lookup x t  -> y 
      | False      -> "impossible" 
      | null t      -> "empty" 
+0

tin tuyệt vời về 'if'! – amindfv

7

Đây là thành ngữ tôi thấy khá thường xuyên vì Haskell thiếu cú ​​pháp đúng cho trường hợp không khớp. Để thực hiện ý định của tôi rõ ràng hơn, tôi thường cố ý phù hợp undefined:

case undefined of 
    _ | foo  -> bar 
    | baz  -> quux 
    | otherwise -> chunkyBacon 
2

Bạn cũng có thể mô hình phù hợp trên loạt cảm xúc của bạn bên trong một tuple

case (test1,test2) of 
    (True,_) -> value1 
    (_,True) -> value2 
    _  -> value3 
+0

Vâng, tôi biết rằng thành ngữ từ Erlang và giới hạn biểu hiện bảo vệ của nó :) Nhưng điều đó thực sự xấu xí khi số lượng vệ sĩ tăng ... – b0fh

Các vấn đề liên quan