使用格式的scheme完全填充示例

使用格式的scheme完全填充示例,scheme,racket,Scheme,Racket,全部 我想将一个元素更改为格式化字符串,然后使用format函数。(我使用的语言是scheme) 正如中的文档所述,如果我想在右侧插入空格,可以使用~mincolA 所以我用 (format "~4A " x) 但我得到了这样一个错误: format: ill-formed pattern string explanation: tag `~4' not allowed pattern string: "~4A " 我希望得到如下结果: 如果

全部

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

正如中的文档所述,如果我想在右侧插入空格,可以使用~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)
为了得到我想要的结果,但我真的想使用“format”函数


谢谢。

注意,参考文档是针对MIT/GNU方案的,函数在Racket中的工作方式不同。开箱即用,您可以使用该功能实现相同的效果:

(~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的答案是正确的。

您可以从以下位置使用
格式
过程:

如果要将原始的
格式
过程与此过程一起保留,可以为SRFI 48中的过程提供前缀:

> (require (prefix-in srfi48: srfi/48))
> (srfi48:format "~4F" 0)

因此原始的
格式仍然可用。

方案没有
格式
过程,但有一个在中可用。它既不符合麻省理工学院的计划,也不符合#!喧闹(语言)

您可以将SRFI-48与#一起使用!以类似方式拍:

#!racket
(require srfi/48)

(format "~4F " "x") ; ==> "   x" 
F
仅适用于文档中规定的数字和字符串:

~[w[,d]]F固定~w,dF输出一个宽度为w和d的数字 小数点后~wF输出宽度为w的字符串或数字


另外,通过评估
(format“~h”)
您可以获得使用说明,因此对于语法的基本提示,您无需访问SRFI页面。

我将其称为既不是附加库,也不是外部库,因为它包含在Racket安装中。在
#lang racket
中默认情况下不需要它。好吧,它不是现成的,这就是我的意思。我不太喜欢为核心语言中已有的一些功能导入另一个库,尽管语法不同。这是一种代码复制,更不用说额外的依赖性和内存开销了。希望有人能标记答案<代码> R6RS会这样做:没有答案你认为可以接受吗?
#!r6rs
(import (rnrs base)
        (srfi :48))

(format "~4F " "x") ; ==> "   x" 
#!racket
(require srfi/48)

(format "~4F " "x") ; ==> "   x"