Чтение кода

39 views
Skip to first unread message

shem

unread,
Sep 27, 2019, 3:30:42 PM9/27/19
to Clojure Russian
Всем привет!
Интенсивно знакомлюсь с этим прекрасным языком, но иногда зацикливаюсь на каких-то местах. Пытался разобраться самостоятельно, но нигде не нашёл подтверждения своим догадкам. Ниже представлен код из известного самоучителя Clojure for the Brave and True. Понятно, что делает функция, ясно. что здесь присутствует рекурсия, но как понимать 3-ю строку: ([] (tri* 0 1)):

(defn tri*
 "Generates lazy sequence of triangular numbers"
 ([] (tri* 0 1))
 ([sum n]
 (let [new-sum (+ sum n)]
 (cons new-sum (lazy-seq (tri* new-sum (inc n)))))))

Если не ошибаюсь, то 3-я стр. представляет из себя список, первый элемент которого [] является функцией, а второй элемент списка - рекурсией (но почему с аргументами 0 1?). Если так. то что делает ф-я []. Если же пустой вектор - это аргументы функции tri*, то что он делает в списке? Вообщем, существуют сомнения. как правильно читать код. Буду признателен за помощь.

Nikolai Ryzhikov

unread,
Sep 28, 2019, 1:08:08 AM9/28/19
to Clojure Russian
Привет - все здесь - 

https://t.me/clojure_ru

Message has been deleted
Message has been deleted
Message has been deleted

shem

unread,
Sep 28, 2019, 2:47:41 PM9/28/19
to Clojure Russian
Спасибо за ссылку, но открыть по ней сайт не смог.


Lemming

unread,
Sep 28, 2019, 3:56:58 PM9/28/19
to Clojure Russian
Это ссылка на Telegram канал, сервисы телеграм блокируются в России, поэтому нужен или VPN  или какое-нибудь расширение для браузера (погугли, для хром их несколько), которое позволяет обойти заблокированные ресурсы, а ну и сам телеграм нужен, он есть для всех платформ, доступен в сторах для мобильных, а для компа можно скачать с их сайта, но опять же, что бы попасть на их сайт, нужно обойти блокировку.

суббота, 28 сентября 2019 г., 21:47:41 UTC+3 пользователь shem написал:

Alex Ott

unread,
Sep 29, 2019, 4:13:31 AM9/29/19
to shem, Clojure Russian
Функция может быть определена с разными списками аргументов, и
соответственно с разными реализациями.

В данном случае, функция имеет две версии:

- без аргументов (пустой вектор: []) - в данном случае она просто вызывает
саму же себя, с двумя аргументами по умолчанию - 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)

shem

unread,
Sep 29, 2019, 9:53:42 AM9/29/19
to Clojure Russian
Благодарю, Alex, разобрался.


Николай Рыжиков

unread,
Sep 29, 2019, 3:37:24 PM9/29/19
to clojure...@googlegroups.com
поищи в телеграмме по названию

сб, 28 сент. 2019 г., 21:46 shem <yes....@gmail.com>:
К сожалению, ссылка не рабочая.

пятница, 27 сентября 2019 г., 22:30:42 UTC+3 пользователь shem написал:

--
Вы получили это сообщение, поскольку подписаны на одну из тем в группе "Clojure Russian".
Чтобы отменить подписку на эту тему, перейдите по ссылке https://groups.google.com/d/topic/clojure-russian/Q5OZ-mbB0SQ/unsubscribe.
Чтобы отменить подписку на эту группу и все ее темы, отправьте письмо на электронный адрес clojure-russi...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/clojure-russian/063791da-174a-4bd6-b742-e52e9ed0b289%40googlegroups.com.

shem

unread,
Sep 30, 2019, 4:03:46 AM9/30/19
to Clojure Russian
Николай, декстопный telegram железно "висит", честно говоря, возиться с ним надоело. Не знаю. может быть не стоило открывать прокси в опере, но не существенно. Спасибо за желание помочь.


Reply all
Reply to author
Forward
0 new messages