idris 中有取模函数吗?
Is there a modulo function in idris?
在Haskell中,有mod
和rem
函数。 Idris 中是否有类似的功能,特别是在 Nat
上定义的?
在Prelude.Nat
中有
modNatNZ : Nat -> (y : Nat) -> Not (y = 0) -> Nat
modNat : Nat -> Nat -> Nat
第一个需要除数不为零的证明,而第二个是部分的(即可能在运行时崩溃)。实际上也有证明,
SIsNotZ : {x: Nat} -> Not (S x = Z)
后继者不能为零。所以你可以只使用 modNatNZ 10 3 SIsNotZ
,统一系统将证明 Not (3 = 0)
。您可以看到 modNatNZ
是如何工作的 here。由于 Nat
始终为正,余数函数的行为相同。
否则,通用
mod : Integral ty => ty -> ty -> ty
为所有实现 Integral 的类型定义(例如 Int)。
在Haskell中,有mod
和rem
函数。 Idris 中是否有类似的功能,特别是在 Nat
上定义的?
在Prelude.Nat
中有
modNatNZ : Nat -> (y : Nat) -> Not (y = 0) -> Nat
modNat : Nat -> Nat -> Nat
第一个需要除数不为零的证明,而第二个是部分的(即可能在运行时崩溃)。实际上也有证明,
SIsNotZ : {x: Nat} -> Not (S x = Z)
后继者不能为零。所以你可以只使用 modNatNZ 10 3 SIsNotZ
,统一系统将证明 Not (3 = 0)
。您可以看到 modNatNZ
是如何工作的 here。由于 Nat
始终为正,余数函数的行为相同。
否则,通用
mod : Integral ty => ty -> ty -> ty
为所有实现 Integral 的类型定义(例如 Int)。