Vector 显示球拍的矢量格式
我用一个向量向量做了一个多维向量,如下所示:Vector 显示球拍的矢量格式,vector,matrix,formatting,racket,Vector,Matrix,Formatting,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)) 我想知道是否有任何球拍功能可以帮助我输出它,如: (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引起的间距变化) 我一直在看文档,没有找到任何东西。如果我需要为它编写自己的函数,你知道我将如何实现这样的功能吗?在Sc
#(#(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)
(注:23引起的间距变化)
我一直在看文档,没有找到任何东西。如果我需要为它编写自己的函数,你知道我将如何实现这样的功能吗?在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)))))
(displayln(字符串连接)(用于/list([j(向量->列表i)])
(~a j#:宽度(计数位数(*n))#:右对齐)
(定义(计数位数a)(如果(
它以灵活的宽度逐个显示元素。漂亮地打印二维列表的一种方法是编写一个简单的过程:
(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使用,它现在支持自定义边框样式
(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)
)
如果我这样做了,我就可以让它们一个接一个地出现,但是获得这样的间距又如何呢?请注意第三列的间距。请检查更新后的答案以获取该间距。祝你好运