Разница между Clojure (диапазон) и (итерация, включая 0) в таблице def -light

Этот код работает:

(def n1 (range))
(println 
     (->> n1
          (take 30))
)

Этот код не работает:

(def n2 (iterate inc 0))
(println 
     (->> n2
          (take 20))
)

Модифицированный код (n2 — функция) работает:

(def n2 #(iterate inc 0))
(println 
     (->> (n2)
          (take 20))
)

Почему второй код не разрешен?

В первом коде (диапазон) возвращает бесконечную последовательность (0...)

во втором коде (iterate inc 0) также возвращает бесконечную последовательность (0...)

Что делает их такими разными?

Пожалуйста, направляйте. Спасибо.

(РЕДАКТИРОВАТЬ)

рад слышать, что код №1 и код №1 эквивалентны.

однако в моей среде (световой стол) это невозможно:

введите здесь описание изображения


person Community    schedule 02.07.2013    source источник
comment
Я думаю, что это легкая проблема. Можете ли вы проверить, работает ли он в простом clojure repl?   -  person Mikita Belahlazau    schedule 02.07.2013
comment
Да, я согласен. Я попробовал режим clj REPL на консоли, код № 2 не выдает ошибку. Спасибо.   -  person    schedule 02.07.2013


Ответы (2)


Ничто не отличается. Оба ваших первых двух фрагмента работают нормально: вы, должно быть, запутались и запустили какую-то другую программу.

Изменить в ответ на разъяснение:

Вероятно, световой стол пытается показать вам промежуточный результат (iterate inc 0), а также окончательный результат. Я предполагаю, что разница в том, что (lazy-seq? (range)) возвращает true, а (lazy-seq? (iterate inc 0)) возвращает false (поскольку первый элемент активен, хотя остальная часть последовательности — нет).

Мне кажется, что это довольно серьезная проблема со световым столом, но чего можно ожидать от программного обеспечения альфа-качества? Во всяком случае, это вовсе не проблема clojure.

person amalloy    schedule 02.07.2013
comment
Спасибо, я думал, ничего другого, однако в моей среде я уверен, что № 2 получил ошибку. Я отредактировал вопрос и добавил скриншот... - person ; 02.07.2013
comment
Ну, я знаю, что это все еще альфа, мой первоначальный вопрос - подтвердить, есть ли проблемы с самим кодом. Я думаю, что Light Table разработан в Clojure, а основной язык предназначен для Clojure. Я сообщил об этой ошибке на их форуме. Благодарю. - person ; 03.07.2013

Крис Грейнджер, разработчик LightTable Добавлена ​​проблема:

https://github.com/Kodowa/Light-Table-Playground/issues/657

Спасибо.

person Community    schedule 03.07.2013