使用格式的方案完整填充示例

时间:2014-08-22 14:45:50

标签: scheme racket

所有

我想将元素更改为格式化字符串,然后使用格式化函数。 (我使用的语言是方案)

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

获得我想要的结果,但我真的想要使用"格式"功能

感谢。

3 个答案:

答案 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页面。