Функция может быть определена с разными списками аргументов, и
соответственно с разными реализациями.
В данном случае, функция имеет две версии:
- без аргументов (пустой вектор: []) - в данном случае она просто вызывает
саму же себя, с двумя аргументами по умолчанию - 0 и 1
- с двумя аргументами - sum & n...
Это стандартный прием для указания дефолтных аргументов
shem at "Fri, 27 Sep 2019 12:30:42 -0700 (PDT)" wrote:
s> Всем привет!
s> Интенсивно знакомлюсь с этим прекрасным языком, но иногда зацикливаюсь на каких-то местах. Пытался разобраться самостоятельно,
s> но нигде не нашёл подтверждения своим догадкам. Ниже представлен код из известного самоучителя Clojure for the Brave and True.
s> Понятно, что делает функция, ясно. что здесь присутствует рекурсия, но как понимать 3-ю строку: ([] (tri* 0 1)):
s> (defn tri*
s> "Generates lazy sequence of triangular numbers"
s> ([] (tri* 0 1))
s> ([sum n]
s> (let [new-sum (+ sum n)]
s> (cons new-sum (lazy-seq (tri* new-sum (inc n)))))))
s> Если не ошибаюсь, то 3-я стр. представляет из себя список, первый элемент которого [] является функцией, а второй элемент списка
s> - рекурсией (но почему с аргументами 0 1?). Если так. то что делает ф-я []. Если же пустой вектор - это аргументы функции tri*,
s> то что он делает в списке? Вообщем, существуют сомнения. как правильно читать код. Буду признателен за помощь.
--
With best wishes, Alex Ott
http://alexott.net/
Twitter: alexott_en (English), alexott (Russian)