В Haskell есть функции mod
и rem
. Существуют ли аналогичные функции в Idris, особенно определенные для Nat
?
Есть ли функция по модулю в idris?
Ответы (1)
В 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
здесь а>. Поскольку Nat
всегда положительное значение, функция остатка будет вести себя так же.
В противном случае общий
mod : Integral ty => ty -> ty -> ty
определен для всех типов, реализующих Integral (например, Int).
person
xash
schedule
07.03.2016
Вот ссылка на modNatNZ, привязанная к определенному коммиту: github.com/idris-lang/Idris-dev/blob/
- person Langston; 24.09.2016