1
在Haskell中,有mod
和rem
函數。 Idris中是否有類似的功能,特別是Nat
?idris是否有模函數?
在Haskell中,有mod
和rem
函數。 Idris中是否有類似的功能,特別是Nat
?idris是否有模函數?
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
被用於實現積分(例如強度)所有類型的定義。
下面是固定到某個提交的modNatNZ的鏈接:https://github.com/idris-lang/Idris-dev/blob/88e7beac09de1c5eba155c571ed7c50ced8cb130/libs/prelude/Prelude/Nat.idr#L316 – Langston