Есть ли в других языках встроенные рациональные типы, такие как схема? - PullRequest
4 голосов
/ 13 июня 2011

Я не слышал ни о каком, большинство языков, кажется, имеют деление целых или округленных чисел с плавающей запятойБыло ли обнаружено, что это является проблемой в схеме и поэтому не используется на других языках?

Ответы [ 4 ]

4 голосов
/ 14 июня 2011

Common Lisp:

CL-USER> (+ 4/5 3/2)
23/10

Фактор

( scratchpad ) 4/5 3/2 + .
23/10

Haskell 98:

Prelude> (4/5) + (3/2) :: Rational
23 % 10
4 голосов
/ 13 июня 2011

Вы спрашиваете о дробях? Если так, то у Smalltalk они есть:

(4/5) + (3/2) 

оценивается как:

(23/10)
3 голосов
/ 15 июня 2011

Вы спрашиваете: «Было ли это обнаружено в схеме как проблема и поэтому не использовалось на других языках?»Ответ на это "нет", но это интересный вопрос.Вообще говоря, Scheme / Racket, возможно, является символом семейства языков, которые, когда предоставляется выбор между «правильным» и «простым в реализации», каждый раз выбирают «правильный».Выбор, сделанный многими другими языками, состоит в том, чтобы явно представлять представления чисел как элементы небольшого конечного набора и требовать, чтобы программист работал в этой сфере.Схема / Ракетка вместо этого обеспечивает представление, которое может обрабатывать произвольно большие числа, ограниченные только памятью машины, оценивающей код.Это мало чем отличается от решения, принятого почти всеми современными языками программирования, чтобы использовать сборщик мусора, вместо того, чтобы заставлять программиста явно выделять и освобождать память.

Как указывает Крис, представление чисел как рациональных почти всегда идет рука об руку с "bignums".Существует множество языков, которые поддерживают bignums - Scheme, Racket, Ruby, Python и т. Д. - и, конечно же, любой язык, полный тьюринга, может быть расширен для обработки bignums, включая C.

2 голосов
/ 13 июня 2011

Рационалы Схемы поддерживают бигнум.Большинство языков не имеют встроенных bignums.

По моему мнению, бессмысленно иметь встроенные рациональные числа без встроенных bignums, потому что без bignums вы начинаете терять точность после определенного момента, иВы также можете быть откровенны о потерях, используя плавающую точку.

...