Я играю с языком, чтобы начать учиться, и я неимоверно озадачен тем, как работает рекурсивное определение.
Например, возьмем последовательность треугольных чисел (TN n = sum [1..n]
)
Предоставленное решение было:
triangularNumbers = scanl1 (+) [1..]
Все идет нормально.
Но решение, которое я придумал, было:
triangularNumbers = zipWith (+) [1..] $ 0 : triangularNumbers
Что тоже правильно.
Теперь мой вопрос: как это перевести на реализацию более низкого уровня? Что именно происходит за кулисами, когда встречается такое рекурсивное определение?
[1..]
. - person Eugene Sh.   schedule 27.07.2015[1..]
(ну, это будет выглядеть не очень красиво, но вы можете назвать это естественным)? Он также использует (или может использовать) саморекурсию и немного проще, чем треугольные числа. Или даже бесконечный список. Конечно, без использования каких-либо предопределенных бесконечных списков. - person Eugene Sh.   schedule 27.07.2015