Я пытаюсь реализовать ленивую последовательность (которая должна генерировать одну строку) в REPL, но безуспешно. Исходный код работает нормально:
(def word_list ["alpha" "beta" "gamma" "beta" "alpha" "alpha" "beta" "beta" "beta"])
(def word_string (reduce str (interpose " " word_list)));
word_string ; "alpha beta gamma beta alpha alpha beta beta beta"
Но не желая оставлять достаточно хорошо в покое, я подумал, что еще сработает, и попытался удалить reduce
, думая, что str
может иметь такой же эффект. Это не ...
(def word_string (str (interpose " " word_list)))
word_string ; "clojure.lang.LazySeq@304a9790"
Я попробовал очевидное, снова используя reduce
, но это тоже не сработало. Есть другой вопрос о реализации ленивых последовательностей, которые казались многообещающими, но ничего из того, что я пробовал, не сработало:
(reduce str word_string) ; "clojure.lang.LazySeq@304a9790"
(apply str word_string) ; "clojure.lang.LazySeq@304a9790"
(println word_string) ; "clojure.lang.LazySeq@304a9790"
(apply list word_string) ; [\c \l \o \j \u \r \e \. \l \a \n \g \. \L \a \z \y...]
(vec word_string) ; [\c \l \o \j \u \r \e \. \l \a \n \g \. \L \a \z \y...]
(apply list word_string) ; (\c \l \o \j \u \r \e \. \l \a \n \g \. \L \a \z \y...)
(take 100 word_string) ; (\c \l \o \j \u \r \e \. \l \a \n \g \. \L \a \z \y...)
Тот факт, что некоторые из вариантов дали мне символы в "clojure.lang.LazySeq", также меня беспокоит - я каким-то образом потерял фактическое строковое значение, а моя ссылка просто имеет значение "clojure". lang.LazySeq "? Если нет, как мне на самом деле осознать ценность?
Чтобы уточнить: учитывая, что word_string
назначен ленивой последовательности, как мне это реализовать? Что-то вроде (realize word_string)
, если бы такое существовало.
Обновление: исходя из принятого ответа и того, как str
работает, оказывается, что я могу получить фактическое значение последовательности, а не только ее имя:
(reduce str "" word_string) ; "alpha beta gamma beta alpha alpha beta beta beta"
Да, это ужасный код. :) Я просто пытался понять, что происходит, почему это ломалось, и было ли реальное значение все еще там или нет.