Предположим, у нас есть списокКак haskell создает новый список из другого списка?
x = [1..10]
и мы намерены создать еще один список у, используя это таким образом:
y= [a|a<-x]
Так, при создании списка y
из x
, он обращается к каждому элементу x
(от 1 до 10) и вставляет его в y
в том же порядке. Поскольку список в haskell является односвязным списком, мы можем вставить новый элемент только в его голове. Итак, сначала он вставляет 1 в []
& у нас есть [1]
. Затем он вставляет 2 в голову &, поэтому у нас есть [2,1]
. Затем он вставляет 3 & у нас есть [3,2,1]
& и так далее. Поэтому в конечном итоге мы должны получить y
как [10,9..1]
. Но вместо этого мы получаем y
как [1..10]
. Почему это так?
Это хорошее объяснение того, как сгладить синтаксис понимания списка: http://stackoverflow.com/a/8029698/1013393 – sjakobi