LINUX.ORG.RU

негодный Хаскель


0

0

Subj - это язык, в котором не компилируется такое простое выражение как "4 `div` 2 + 0.0", при том, что "2", "2 + 0.0" и "4 `div` 2" ошибок не вызывают.

Расскажите, любители Хаскеля, как вы с этим живете?

anonymous

и?
что ты хотел этим сказать? что ты полный индюк представления не имеющий о различных реализациях вещественной арифметики? Как ты представляешь _целочисленное_ деление целого числа на вещественное? Или ты хочешь, чтобы компилятор хранил контекст предварительного вычисления константных выражений, чтобы потом, если это выражение подставляется в функцию принимающую только инты, привести тип числа к целому, если оно действительно целое?
Не, это слишком толсто ;)

Joe_Bishop
()

Толсто.

Что вы собственно пытаетесь сказать этим выражением?

Вот нормальные варианты:

4 `div` 2 + 0 == 2

4 / 2 + 0.0 == 2.0

Либо:

fromIntegral (4 `div` 2) + 0.0 == 2.0

Вывод из всего этого - что неявного преобразования типов нет, что на самом деле плюс.

Но чтобы это так сильно не напрягало числовые литералы полиморфны.

imp ★★
()

>Расскажите, любители Хаскеля, как вы с этим живете?

хорошо живём :) не жалуемся

jtootf ★★★★★
()

Правильно делает. Поскольку нормальный мозг такое написать не может, значит, программист либо нарезался в дупель, либо допустил опечатку. И в том, и в другом случае компилить это не надо.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Могу автору посоветовать PHP, там компилируется, да еще и глобально и надежно впридачу.

ratatosk
()
Ответ на: комментарий от Joe_Bishop

Я не тот анонимус, но отвечу:

> Как ты представляешь _целочисленное_ деление целого числа n на вещественное x?

Элементарно, Ватсон! Для определения воспользуйтесь целой частью и дробной частью:

n mod x = x*{n/x}
n div x = x*[n/x]

Эффективно вычислять это возможно надо и по-другому.



www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Joe_Bishop

> Молодец. А смысл какой-нибудь в таком определении есть?

Да, в частности -- такое деление с отатком для целых чисел дает тот же результат. И вообще оно интуитивно понятно:

8 div 3.7 = 2

8 mod 3.7 = 0.4

www_linux_org_ru ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.