(x, y : SomeType) -> (cond x y) = True -> SomeType
imzalı bir işleve sahibim. If-then-else/case/with ifadesindeki durumu kontrol ettiğimde, ilgili bir branştaki fonksiyona nasıl geçebilirim, bu koşul doğru mu?Koşullu deyim dalında bağımlı işlevi söyle o koşul doğru
9
A
cevap
23
Bunu kolayca yapmak için DecEq
kullanabilirsiniz:
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"
Ama atlatma.
Booleanları kullanmak (=
veya So
aracılığıyla), bir şeyin doğru olduğunu bildirebilir, ancak neden. Kanıtları bir araya getirmek ya da parçalamak istiyorsanız, niçin çok önemlidir. add
'un x + y < 20
numaralı bir fonksiyona ihtiyaç duyduğunu düşünün. x + y < 10 = True
'un ispatını geçemeyiz, çünkü İdris yalnızca bu işlem hakkında hiçbir şey bilmiyor, sadece bu doğru. Bunun yerine, nedeninin neden olduğunu doğru bir şekilde yazmanız gerekir. LTE
daha az-daha karşılaştırmalar için yapan bir türüdür: Artık
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"
, add
bir LTE (x + y) 20
biz kısıtlamasını genişletmek için bir işlev yazabilirsiniz gerekli bir işlev çağrılırsa:
widen : a `LTE` b -> (c : Nat) -> a `LTE` (b + c)
widen LTEZero c = LTEZero
widen (LTESucc x) c = LTESucc (widen x c)
budur sadece boole ile yapabileceğimiz bir şey değil.
İlgili konular
- 1. if deyim kabuk komut dosyasında birden çok koşul
- 2. Koşullu olarak bir işlevi çağırın
- 3. Özyineleme işlevi için Big O
- 4. Koşullu Biçimlendirme birden çok koşul kullanarak - Excel 2007
- 5. koşul koşul çalışmıyorsa Günleri
- 6. Koşullu bir
- 7. Biçim koşul ifade EPPlus
- 8. Javascript'te Koşullu Operatörler
- 9. Django şablonlarında VEYA koşul
- 10. python eşleme işlevi (+ lambda) koşullu ifadeler (if)
- 11. Kıvılcım koşullu Spark SQL pencere işlevi
- 12. Python Koşullu Değişken Ayarı
- 13. CodeIgniter etkin kayıt, içinde deyim IF Ekle> seçeneğini() işlevi
- 14. python deyim için python deyim python ifadesi
- 15. Koşul operatörü, garip davranış
- 16. bir deyim
- 17. Spark sbin/klasöründe stop-all.sh işlevi tüm bağımlı düğümleri durdurmuyor
- 18. Koşullu işleçle Grails'de 'JSON olarak düzenleme' doğru şekilde görüntülenmiyor
- 19. JOIN iki SELECT deyim sonuçları
- 20. PHP {$ koşul} && execute();
- 21. Yerel master'i git dalında bir şubeye dönüştürün
- 22. Git filtre dalında çok sayıda dosyayı kaldırın
- 23. koşul ve alt-fonksiyon
- 24. LINQ - koşul
- 25. HAML: koşul
- 26. Kulplar koşullu sınıf öznitelikleri
- 27. Python argparse required = Doğru ama --version işlevi?
- 28. Angular2 bağımlı bileşenler
- 29. 'Sırayla' koşul nasıl eklenir?
- 30. Select2 Bağımlı açılan listeler