В Clojure легко создавать бесконечные последовательности, используя конструктор ленивой последовательности. Например,
(def N (iterate inc 0))
возвращает объект данных N
, который эквивалентен бесконечной последовательности
(0 1 2 3 ...)
Оценка значения N
приводит к бесконечному циклу. Оценка (take 20 N)
возвращает 20 верхних чисел. Поскольку последовательность является ленивой, функция inc
только повторится, когда вы ее попросите. Поскольку Clojure является гомоиконическим, ленивая последовательность хранится рекурсивно.
В R, возможно ли сделать что-то подобное? Можете ли вы представить пример R-кода, который создает объект данных N
, который эквивалентен полной бесконечной последовательности натуральных чисел? Оценка полного объекта N
должна привести к циклу, но что-то вроде head(N)
должно возвращать только ведущие числа.
Примечание. Меня больше интересуют ленивые последовательности, а не натуральные числа как таковые.
Изменить: Вот источник Clojure для lazy-seq
:
(defmacro lazy-seq
"Takes a body of expressions that returns an ISeq or nil, and yields
a Seqable object that will invoke the body only the first time seq
is called, and will cache the result and return it on all subsequent
seq calls. See also - realized?"
{:added "1.0"}
[& body]
(list 'new 'clojure.lang.LazySeq (list* '^{:once true} fn* [] body)))
Я ищу макрос с той же функциональностью в R.