Ленивое вычисление и повторное использование Haskell

Я знаю, что если бы я вычислил список квадратов в Haskell, я мог бы сделать это:

squares = [ x ** 2 | x <- [1 ..] ]

Затем, когда я вызываю такие квадраты:

print $ take 4 squares

И он выводит [1.0, 4.0, 9.0, 16.0]. Это оценивается как [1 ** 2, 2 ** 2, 3 ** 2, 4 ** 2]. Теперь, когда Haskell работает и результат будет каждый раз одинаковым, если бы я снова вызвал квадраты где-нибудь еще, переоценил бы он уже вычисленные ответы? Если бы я повторно использовал квадраты после того, как я уже вызвал предыдущую строку, будет ли он пересчитывать первые 4 значения?

print $ take 5 squares

Будет ли он оценивать [1.0, 4.0, 9.0, 16.0, 5 ** 2]?

11
задан Jonathan Sternberg 26 December 2010 в 01:43
поделиться