или как это реализовано.

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

Но в учебнике по Haskell я вижу пример.

xs = [1,2,3,4,5,6,7,8] 

doubleMe(doubleMe(doubleMe(xs)))

Автор сказал, что императивный язык, вероятно, пройдет через список один раз и сделает копию, а затем вернет ее. Затем он пройдет через список еще два раза и вернет результат.

Но на ленивом языке, он сначала вычислит

doubleMe(doubleMe(doubleMe(1)))

Это вернетdoubleMe(1), который2, затем4, и наконец8.

Так что только один проход по списку и только тогда, когда вам действительно это нужно.

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

Ответы на вопрос(1)

Ваш ответ на вопрос