Haskell: "Cast" / тип силы? - PullRequest
       8

Haskell: "Cast" / тип силы?

6 голосов
/ 19 декабря 2011

Как мне сказать, что Haskell интерпретирует что-то как специальный тип? Например, у меня есть список, и я хочу разделить его длину на 2. Поэтому я пишу

(length mylist) / 2

и получите эту ошибку

Нет экземпляра для (Fractional Int) в результате использования `/ '

Поскольку я хочу деление целых чисел, я хотел бы сделать length mylist, 2 и результат Int.

Ответы [ 2 ]

11 голосов
/ 19 декабря 2011

Здесь есть две разные проблемы.

  • Целочисленное деление: используйте функцию div: div (length mylist) 2 или (length mylist) `div` 2

  • Кастинг. Можно сказать Хаскеллу, что конкретное выражение имеет определенный тип, написав expression :: type вместо просто expression. Тем не менее, это не делает никакого «приведения» или «преобразования» значений. Некоторые полезные функции для преобразования между различными числовыми и строковыми типами: fromIntegral, show, read, realToFrac, fromRational, toRational, toInteger и другие. Вы можете посмотреть их на Hoogle .

5 голосов
/ 19 декабря 2011

Попробуйте div (length my list) 2./ делает дробное деление;div делает целочисленное деление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...