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

=== Пример 3 ===
 
Есть два способа обозначения списков — квадратные скобки, в которых перечислены элементы через запятую, или круглые скобки, в которых элементы разделены двоеточием. В частности записи <code>[1, 2, 3]</code>, <code>(1:2:3:[])</code> и <code>(1:(2:(3:([]))))</code> эквивалентны. Символ двоеточие '<code>:</code>' означает операцию присоединения элемента к списку слева. Пусть <code>x</code> есть элемент, а <code>xs</code> — некоторый список элементов того же типа, что и <code>x</code>. Тогда выражение <code>x:xs</code> есть список, полученный из списка <code>xs</code> с помощью добавления элемента <code>x</code> в начало. Но интересно заметить, что конструкцию <code>(x:xs)</code> можно использовать и слева от знака «равно», где она соответствует операции отщепления первого элемента от списка. Это позволяет рекурсивно определить функцию <code>length</code>, которая измеряет длину списка элементов неопределённого типа:
 
<code>length :: [a] -&gt; Integer
Анонимный участник