idris – 在条件语句分支中指定条件为真的依赖函数
发布时间:2020-05-23 06:22:49 所属栏目:程序设计 来源:互联网
导读:我有一个类型签名(x,y:SomeType)的功能 – (cond x y)= True – SOMETYPE.当我检查if-then-else / case / with语句中的条件时,如何传递给相应分支中的函数,该条件是真的? 您可以使用DecEq来做到这一点: add : (x, y : Nat) - x + y 10 = True - Natadd x y
|
我有一个类型签名(x,y:SomeType)的功能 – > (cond x y)= True – > SOMETYPE.当我检查if-then-else / case / with语句中的条件时,如何传递给相应分支中的函数,该条件是真的? 您可以使用DecEq来做到这一点: 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"
但你不应该. 使用布尔(通过 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"
现在,如果添加称为需要LTE(x y)20的函数,我们可以编写一个扩大约束的函数: widen : a `LTE` b -> (c : Nat) -> a `LTE` (b + c) widen LTEZero c = LTEZero widen (LTESucc x) c = LTESucc (widen x c) 这不是我们可以轻易地做的只是布尔值. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
