Как можно seq оценить бесконечный список в Haskell? - PullRequest
0 голосов
/ 27 февраля 2019

Говорят, что функция Haskell seq вынуждает вычислить свой первый аргумент и возвращает второй.Он используется для добавления строгости в оценку выражений.Итак, как следующее может просто вернуть 5:

seq [1..] 5

Разве это не должно застрять при попытке создать бесконечный список?

1 Ответ

0 голосов
/ 27 февраля 2019

seq оценивается как нормальная форма слабой головы (WHNF), что по сути означает, что он оценивает один уровень конструкторов данных.В этом случае это означает, что оно вызывает оценку первой cons-ячейки (конструктор данных :).

У меня довольно длинный пост с подробным объяснением этого вопроса на https://haskell.fpcomplete.com/tutorial/all-about-strictness

...