Tôi có chức năng có chữ ký loại (x, y : SomeType) -> (cond x y) = True -> SomeType
. Khi tôi kiểm tra điều kiện trong câu lệnh if-then-else/case/with, làm thế nào để chuyển cho hàm trong một nhánh tương ứng thực tế, điều kiện đó là đúng?Cho biết chức năng phụ thuộc trong nhánh lệnh điều kiện có điều kiện là đúng
Trả lời
Bạn có thể sử dụng DecEq
để làm điều này dễ dàng:
add : (x, y : Nat) -> x + y < 10 = True -> Nat
add x y _ = x + y
main : IO()
main =
let x = S Z
in let y = Z
in case decEq (x + y < 10) True of
Yes prf => print (add x y prf)
No _ => putStrLn "x + y is not less than 10"
Nhưng bạn không nên.
Sử dụng booleans (qua =
hoặc So
) có thể cho bạn biết rằng điều gì đó là đúng, nhưng không phải là lý do tại sao. lý do tại sao là rất quan trọng nếu bạn muốn kết hợp các bản in lại với nhau hoặc tách chúng ra. Hãy tưởng tượng nếu add
được gọi là một chức năng cần thiết x + y < 20
- chúng tôi không thể vượt qua bằng chứng của chúng tôi rằng x + y < 10 = True
vì Idris không biết gì về hoạt động, chỉ cần đó là sự thật.
Thay vào đó, bạn nên viết ở trên với loại dữ liệu có chứa lý do tại sao đó là sự thật. LTE
là một loại mà làm thế để so sánh ít hơn:
add : (x, y : Nat) -> LTE (x + y) 10 -> Nat
add x y _ = x + y
main : IO()
main =
let x = S Z
in let y = Z
in case isLTE (x + y) 10 of
Yes prf => print (add x y prf)
No _ => putStrLn "x + y is not less than 10"
Bây giờ, nếu add
gọi là chức năng mà cần một người LTE (x + y) 20
chúng ta có thể viết một hàm để mở rộng các hạn chế:
widen : a `LTE` b -> (c : Nat) -> a `LTE` (b + c)
widen LTEZero c = LTEZero
widen (LTESucc x) c = LTESucc (widen x c)
Đây là không phải cái gì chúng ta có thể dễ dàng làm với booleans.
- 1. Phụ thuộc đá quý có điều kiện
- 2. maven phụ thuộc có điều kiện
- 3. Điều kiện cho chức năng bản đồ
- 4. Các câu lệnh điều kiện C++ có mang phụ thuộc từ biểu thức điều kiện đến câu lệnh không?
- 5. "Điều kiện có điều kiện" trong mệnh đề WHERE (Điều kiện áp dụng nào phụ thuộc vào cờ "chế độ")
- 6. Đợi cho đến khi điều kiện là đúng?
- 7. Tiêm phụ thuộc dựa trên điều kiện
- 8. Phụ thuộc có điều kiện trong Ruby Gemspec
- 9. C# Đợi cho đến khi điều kiện là đúng
- 10. Điều kiện hợp lệ cho zcml: điều kiện là gì?
- 11. Lâu đài windor Thêm phụ thuộc có điều kiện
- 12. "Kiểm tra điều kiện BuildConfig.DEBUG có điều kiện" là gì?
- 13. Điểm ngắt điều kiện phụ thuộc dòng không
- 14. Handlebars thuộc tính lớp có điều kiện
- 15. tham gia điều kiện mysql phụ thuộc vào một cột
- 16. 'Đủ điều kiện' có nghĩa là gì trong câu lệnh 'Nhập dữ liệu đủ điều kiện.List' đủ điều kiện?
- 17. Toán tử điều kiện chỉ với câu lệnh đúng
- 18. Google Biểu mẫu - Instant Phân nhánh có điều kiện
- 19. C#! Thuộc tính có điều kiện?
- 20. Cách nhận Điều kiện Bảo hiểm cho các Phụ thuộc Chức năng mà không sử dụng -XUndecidableInstances
- 21. điều kiện điều kiện javascript trong điều kiện sáng bóng: có R% trong% toán tử trong javascript không?
- 22. Kéo các chức năng đa hình không có phụ kiện có các phụ thuộc
- 23. Rails - Validation: nếu một điều kiện là đúng
- 24. Điều kiện với câu lệnh trong Python
- 25. Bạn cần biết những kỹ thuật nào để tránh phân nhánh có điều kiện?
- 26. SQL nơi điều kiện luôn đúng
- 27. Biên soạn có điều kiện tại Scala
- 28. SP_WHO2 có điều kiện?
- 29. lớp có điều kiện năng động mỏng
- 30. Chức năng Lodash _.filter chỉ đáp ứng MỘT điều kiện