Всем привет!
Продолжаю пилить свой Scheme на Java, сейчас реализую numerical tower. Осталось сделать только complex numbers.
1)
Но тут возник вопрос: как надо правильно реализовывать numerical tower?
Проблема в том, что в Java numerical tower нет, да и вообще, числа реализованы довольно кривовато - много special cases, ограничений и костылей.
Мне бы хотелось использовать встроенные в джаву int, long, float, double и др. числовые типы + добавить свои. Только вот как по-хорошему скрестить ежа с ужом?
Одна из проблем: не очень понятно как красиво и просто конвертировать из одного типа в другой (автоматически). Например, чтобы дефолту всегда использовались int, если их не хватает, то автоматически переходить на long, потом BigInteger и тд.
Есть какие-нибудь стандартные подходы к данной проблеме?
Нашел вот такую штуку:
http://www.ccs.neu.edu/racket/pubs/padl12-stff.pdf
2)
Не понимаю один пример в Racket:
> #e2.3
23/10
> (inexact->exact 2.3)
2589569785738035/1125899906842624
В Guile оба возвращают одно и то же, что ИМХО логично.
В Racket просто решили сделать такую 'оптимизацию', чтобы лишних вычислений не делать?