所有
我想将元素更改为格式化字符串,然后使用格式化函数。 (我使用的语言是方案)
正如http://www.gnu.org/software/mit-scheme/documentation/mit-scheme-ref/Format.html中的文件所说,如果我想在右边插入空格,我可以使用~mincolA。
所以我用
(format "~4A " x)
但是我得到了这样的错误:
format: ill-formed pattern string
explanation: tag `~4' not allowed
pattern string: "~4A "
我想得到如下结果:
如果x为0,则结果为空格空间0;
如果x为12,则结果为空格12。
我知道我可以使用
(string-append (make-string (- 4 (string-length x)) #\ ) x)
获得我想要的结果,但我真的想要使用"格式"功能
感谢。
答案 0 :(得分:4)
请注意,引用的文档适用于MIT / GNU Scheme,format
函数在Racket中的工作方式不同。开箱即用,您可以使用~a
功能获得相同的效果:
(~a x #:min-width 4 #:align 'right #:left-pad-string " ") ; x can be a number or a string
例如:
(~a 0 #:min-width 4 #:align 'right #:left-pad-string " ")
=> " 0"
(~a "12" #:min-width 4 #:align 'right #:left-pad-string " ")
=> " 12"
如果你不介意导入一个额外的外部库,@ uselpa的回答是正确的。
答案 1 :(得分:3)
您可以使用SRFI 48中的format
程序:
> (require srfi/48)
> (format "~4F" 0)
" 0"
> (format "~4F" 12)
" 12"
如果您想保留原始format
程序以及此程序,您可以从SRFI 48给出一个前缀:
> (require (prefix-in srfi48: srfi/48))
> (srfi48:format "~4F" 0)
因此原始的format
仍然可用。
答案 2 :(得分:1)
Scheme没有format
程序,但SRFI-48中有一个程序可用。它与MIT Scheme和#!racket(语言)不兼容。
#!r6rs
(import (rnrs base)
(srfi :48))
(format "~4F " "x") ; ==> " x"
你可以用#!racket以类似的方式使用SRFI-48:
#!racket
(require srfi/48)
(format "~4F " "x") ; ==> " x"
根据文档, F
仅适用于数字和字符串:
〜[w [,d]] F固定~w,dF输出宽度为w且d位的数字 小数点后; ~wF输出宽度为w的字符串或数字。
另外,通过评估(format "~h")
,您会获得使用说明,因此对于语法的基本提醒,您无需访问SRFI页面。