在Haskell中,有mod
和rem
函数。 Idris中是否有类似的功能,尤其是Nat
上的定义?
答案 0 :(得分:3)
在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)。