Вопрос про WHNF

Sep 30, 2015 12:07

А вот подскажите, на Haskell Wiki вот тут в последнем абзаце дурь написана, да? Никакой разницы между встроенными и пользовательскими частично примененными функциями нет?
Prelude> (+) undefined `seq` 5 5 Prelude> const undefined `seq` 5 5 Prelude> (\x y -> x) undefined `seq` 5 5 Или это только в последней версии GHC?

UPD. Нет, понял, там все ( Read more... )

рабочее, haskell

Leave a comment

Comments 7

deni_ok September 30 2015, 09:06:36 UTC
А нет, понял, сам дурак. Пусть висит, демонстрирует мою глупость.

Reply

sassa_nf September 30 2015, 12:16:38 UTC
а можно продемонстрировать мою глупость и таки объяснить, в чем был вопрос и о чем гласит цитируемый абзац? Я только смог понять, что "it may seem to be different" (и built-in functions идут отдельным пунктом от лямбда-абстракций), но заключение как-то напутано и мне не ясно, к какому выводу они приходят.

Reply

deni_ok September 30 2015, 14:22:54 UTC
(\x y -> x) undefined таки не является WHNF, в ней происходит вычисление при форсировании seq'ом, то есть она превращается при этом в \y -> undefined. Но никаких других вычислений, кроме связывания x с undefined не выполняется, потому что результат связывания спрятан за барьером лямбда абстракции, а там вычисления не происходят, так как это уже WHNF.

Мне казалось по глупости, что если что-то не находится в WHNF, то всегда можно исхитриться и вклеить в процесс редукции к WHNF расходимость.

Reply

deni_ok September 30 2015, 21:10:54 UTC
А вот более интересный вопрос: к какой WHNF был приведен левый операнд seq вот здесь:

Prelude> (\True y -> ()) False `seq` 5
5
Я знаю ответ, и он не противоречит цитируемому абзацу, но как задачка на понимание вопрос хорош.

Reply


Leave a comment

Up