我使用矢量矢量制作了一个多维向量,如下所示:
#(#(1 1 1 1 1) #(1 1 1 1 1) #(1 1 1 1 1) #(1 1 1 1 1) #(1 23 1 1 1))
我想知道是否有任何可以帮助我输出的Racket函数:
(1 1 1 1 1)
(1 1 1 1 1)
(1 1 1 1 1)
(1 1 1 1 1)
(1 23 1 1 1)
(注意:由23引起的间距变化)
我一直在阅读文档而无法找到任何内容。如果我需要为它编写我自己的函数,任何想法我将如何实现这样的东西?
答案 0 :(得分:1)
在Scheme中,你可以简单地使用for循环:
(for ([i vector])
(display (vector->list i))
(display "\n"))
同时,如果你需要一些格式:
(displayln (string-join (for/list ([j (vector->list i)])
(~a j #:width (count-digits (* n n)) #:align 'right))))
(define (count-digits a) (if (< a 10) 1 (+ 1 (count-digits (/ a 10)))))
以灵活宽度逐个显示元素。
答案 1 :(得分:1)
漂亮打印二维列表的一种方法是编写一个简单的程序:
(define (print-2-dim-list lol)
(define (transpose xss)
(apply map list xss))
(define t (transpose lol))
(define list-of-max-len (map (λ (l) (foldr (λ (x v) (max (string-length (format "~a" x)) v)) 0 l)) t))
(printf "(\n")
(for ([row lol])
(printf "(")
(for ([x row]
[max-len list-of-max-len])
(printf "~a" x)
(for ([n (+ 1 (- max-len (string-length (format "~a" x))))])
(printf "~a" #\space)))
(printf ")\n")
)
(printf ")\n"))
(print-2-dim-list (map vector->list (vector->list #(#(1 1 1 1 1) #(1 1 1 1 1) #(1 1 1 1 1) #(1 1 1 1 1) #(1 23 1 1 1)))))
(
(1 1 1 1 1 )
(1 1 1 1 1 )
(1 1 1 1 1 )
(1 1 1 1 1 )
(1 23 1 1 1 )
)
另一种方法是使用 Laurent Orseau 的 text-table,它现在支持自定义边框样式。
(displayln
(table->string (map vector->list (vector->list #(#(1 1 1 1 1) #(1 1 1 1 1) #(1 1 1 1 1) #(1 1 1 1 1) #(1 23 1 1 1))))
#:border-style
'(#\space ("(" " " ")")
("(" "" "")
("" "" "")
(")" "" ""))
#:framed? #t
#:row-sep? #f
#:align '(left)))
(
(1 1 1 1 1)
(1 1 1 1 1)
(1 1 1 1 1)
(1 1 1 1 1)
(1 23 1 1 1)
)