Tùy thuộc vào thứ tự đánh giá của bạn (thứ tự mà bạn kiểm tra giá trị), bạn có thể viết một phiên bản lười biếng:
Prelude> True || undefined
True
Prelude> undefined || True
*** Exception: Prelude.undefined
Prelude> :t or
or :: [Bool] -> Bool
Prelude> or [True, undefined]
True
trên thực tế, định nghĩa mặc định trong Haskell sẽ cư xử như thế này, vì Haskell là một lười biếng ngôn ngữ. Tuy nhiên, không có cách nào để "bỏ qua" một giá trị không xác định, mà không nhìn vào giá trị trước tiên, điều này sẽ đánh giá giá trị đó ở phía dưới, khiến cho biểu thức của bạn không được xác định.
Hãy nhớ rằng giá trị lười biếng là quà với bóng ma bên trong chúng:
Nếu bạn nhìn vào bên trong hộp, một con ma có thể giúp bạn.
Nếu việc kiểm tra đáy là quan trọng (ví dụ như một phần của kiểm tra), bạn có thể coi chúng là ngoại lệ, and intercept them. Nhưng bạn sẽ không làm điều đó trong một chức năng thuần khiết.
Nguồn
2012-06-08 15:06:25
Đây có phải là đánh giá lười biếng hoặc giải thích haskell của bạn về logic có giá trị ba không? –
'undefined' không phải là giá trị; đó là sự vắng mặt của một giá trị. Do đó, bạn không thể "kiểm tra nếu nó không được xác định", vì vậy bạn phải chọn: số 1, 6 và 8 hoặc số 4, 5, 6; bạn không thể có cả hai. – dflemstr