Comments 14
Кратко, просто и по делу
«Т.е. нам нужно как-то указать, что мы имеем в виду одни и те же выражения» — тут встаёт вопрос… А на кой чёрт в Хаскеле сделан весь этот геморрой с IO, если реально референциальная прозрачность не используется?
Она используется, вопрос в том, как понять вычислялось ли такое выражение раньше или нет. Вместо того, чтобы искать среди всех выражений программы (слишком долго) используется ссылка на выражение.
Не вижу при таком подходе отличий от богомерзкой джавы. Что там что там надо думать о том, что и когда вычисляется. Тока в джаве когда хочется чёнить в лог сказать можно взять и сказать.
В Хаскеле есть инструменты для дебага. Например — Debug.trace, если мне не изменяет память, печатает из любого места программы.
Разница заключается в том, что на java такого не напишешь:
А думать вообще стоит всегда ;)
primes = 2 : filter prime [3,5..] prime p = not (any (\x -> p`mod`x == 0) (takeWhile (\x -> x^2 <= p) primes)) main = print (take 10 primes)
А думать вообще стоит всегда ;)
А фибоначчи то как убого выглядит! Не джаве не место в промышленности…
А как вам тогда ленивый ввод-вывод? ;)
и это для данных любого размера!
main = do text <- getContents putStr (map toUpper text)
и это для данных любого размера!
> Не джаве не место в промышленности…
Разработчики на php, с++ смотрят как-то недовольно, свирепо и в то же время грустно и с недоумением.
Разработчики на php, с++ смотрят как-то недовольно, свирепо и в то же время грустно и с недоумением.
Я так понимаю это работает как-то за счет Constant Applicative Forms, грубо говоря за счет того, что константные выражения вычисляются только один раз. Верно?
Кто-нибудь может дать ссылки где поподробнее про это расписано?
Кто-нибудь может дать ссылки где поподробнее про это расписано?
А всегда ли такой метод пройдет? Определить массив и вместо вызова функции обращаться к ячейке массива? Есть ограничения?
Тут действуют естественные ограничения: индекс массива играет роль параметра функции и потому тут все зависит от множества определения функции, т.е. множества возможных значений параметров. Если такое множество слишком большое, то накладные расходы на хранение такого массива могут превышать выгоду от кеширования.
Sign up to leave a comment.
Динамическое программирование и ленивые вычисления