Ответ 1
user> (str (map inc (range 10)))
"[email protected]"
user> (pr-str (map inc (range 10)))
"(1 2 3 4 5 6 7 8 9 10)"
Метод toString
LazySeq
вызывается str
, и это позволяет избежать ленивой последовательности значений путем непрозрачного отображения идентификатора объекта. Функция pr-str
вызывает мультиметод print-dup
объекта, который предназначен для получения версии вещи, которая может быть понята читателем (поэтому для LazySeq
буквальное значение, которое сделает равным LazySeq
).
Для правильного форматирования структур просмотрите пространство имен clojure.pprint
, которое поставляется с clojure.core
, которое имеет pprint
, print-table
и различные функции для настройки поведения красивой печати.
user> (require '[clojure.pprint :as pprint :refer [pprint print-table]])
nil
user> (pprint [:a [:b :c :d [:e :f :g] :h :i :j :k] :l :m :n :o :p :q [:r :s :t :u :v] [:w [:x :y :z]]])
[:a
[:b :c :d [:e :f :g] :h :i :j :k]
:l
:m
:n
:o
:p
:q
[:r :s :t :u :v]
[:w [:x :y :z]]]
nil
user> (print-table (map #(let [start (rand-int 1e6)] (zipmap % (range start (+ start 10)))) (repeat 5 [:a :b :c :d :e :f :g :h :i :j])))
| :a | :c | :b | :f | :g | :d | :e | :j | :i | :h |
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
| 311650 | 311652 | 311651 | 311655 | 311656 | 311653 | 311654 | 311659 | 311658 | 311657 |
| 67627 | 67629 | 67628 | 67632 | 67633 | 67630 | 67631 | 67636 | 67635 | 67634 |
| 601726 | 601728 | 601727 | 601731 | 601732 | 601729 | 601730 | 601735 | 601734 | 601733 |
| 384887 | 384889 | 384888 | 384892 | 384893 | 384890 | 384891 | 384896 | 384895 | 384894 |
| 353946 | 353948 | 353947 | 353951 | 353952 | 353949 | 353950 | 353955 | 353954 | 353953 |
nil