В Haskell мы можем определять бинарные операторы с различными символами (включая %
), как обычные функции, так что вы можете определить %
как произвольный оператор, который вы хотите (в модуле, который вы его определяете).
Как наиболее типичный случай, %
предоставляется как конструктор типа Ratio
модулем Data.Ratio .
Попробуйте приведенный ниже код на GHCi, чтобы убедиться, что%
предоставляется Data.Ratio
:
ghci> 3 % 9
<interactive>:1:3: error:
Variable not in scope: (%) :: Integer -> Integer -> t
ghci> import Data.Ratio
ghci> 3 % 9
1 % 3
И помните, что вы можете искать такие операторы и функции в этих поисковых системах:
На самом деле я посмотрел, как %
определяется Hoogle .
% - это инфиксная функция, определяемая как
(%) :: Integral a => a -> a -> Ratio a
и из определения типа, приведенного выше, вы можете видеть, что он является частью библиотеки Data.Ratio
, которая в основном имеет дело с соотношениями (то есть: дробями).Его код
x % y = reduce (x * signum y) (abs y)
, поэтому, учитывая два интеграла (x, y), он возвращает неприводимую дробь x / y