Язык Haskell: О пользе и вреде лени: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 151:
[[Изображение:2_2.jpg|right|frame|Карикатура «Учись лениться!»]]
 
Это последовательность, которая остаётся равна сама себе после добавления единицы в начало. Неленивые языки, которым не терпитcя сделать сразу то, что от них просят, очень скоро получат переполнениеошибку стекаисполнения или(например, ошибку переполнение памяти). Ленивый язык Haskell не спешит раскрывать определение, данное ему справа от знака «равно», а раскрывает его по мере необходимости. Такое «равно» называют «ленивым равно», оно по сути означает определение функции, а не операцию присваивания. Есть функциональные языки, в которых есть два типа «равно» — ленивое (определение функции) и неленивое (вычисление выражения справа и присваивание результата переменной, что слева от знака «равно»). Например, в языке [[w:Mathematica|Mathematica]] (http://wolfram.com) для определения функций используется <code>:=</code>, а для присваивания — просто <code>=</code>.
 
Рассмотрим функцию <code>numsFrom</code>, которая получает один аргумент — целое число <code>n</code> — и возвращает список всех целых чисел, которые больше либо равны <code>n</code>: