Haskell, преобразовывающий Плавание в Интервал

Можно начать здесь и здесь .

Для больше подробно смотрят на дизайн pattners, необходимо посмотреть Шаблоны разработки: Элементы Допускающего повторное использование Объектно-ориентированного программного обеспечения . Исходный код не находится в Python, но это не должно быть для Вас для понимания шаблонов.

10
задан mskfisher 10 May 2012 в 17:15
поделиться

3 ответа

Вы не публикуете ошибку типа, которую получаете, но я предполагаю, что это примерно так:

Prelude> let x = 2
Prelude> let y = 7
Prelude> [1 .. (logBase x y)] 

<interactive>:1:7:
    No instance for (Floating Integer)
      arising from a use of `logBase' at <interactive>:1:7-17
    Possible fix: add an instance declaration for (Floating Integer)
    In the expression: (logBase x y)
    In the expression: [1 .. (logBase x y)]
    In the definition of `it': it = [1 .. (logBase x y)]

Проблема в том, что:

Prelude> :t logBase
logBase :: (Floating a) => a -> a -> a

возвращает тип в классе Floating, а другие переменные в вашей программе (1, 'x', 'y') относятся к целочисленному типу.

Я полагаю, вам нужна последовательность целых чисел?

Prelude> :set -XNoMonomorphismRestriction
Prelude> let x = 2
Prelude> let y = 42
Prelude> [1 .. truncate (logBase x y)] 
[1,2,3,4,5]

Используйте truncate, celing или floor.

10
ответ дан 3 December 2019 в 19:34
поделиться

Вероятно, вам понадобится одна из функций списка здесь . Hoogle и Hayoo! - отличные инструменты для такого рода вещей, поскольку они позволяют вам указать тип функции, которую вы хотите, и получить обратно список функций. С системой расширенных типов Haskell это может быть очень полезным инструментом, гораздо более полезным, чем языки с динамической типизацией или даже языки со статической типизацией, такие как C или Java.

8
ответ дан 3 December 2019 в 19:34
поделиться

Возможно, вам понадобится функция округления, усечения, пола или потолка. Ints и Floats - это разные типы (как вы видели), и компилятор не позволит вам смешивать их. Я найду ссылку через минуту.

2
ответ дан 3 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: