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)
)      

如果我这样做了,我就可以让它们一个接一个地出现,但是获得这样的间距又如何呢?请注意第三列的间距。请检查更新后的答案以获取该间距。祝你好运