使用格式的scheme完全填充示例
全部 我想将一个元素更改为格式化字符串,然后使用format函数。(我使用的语言是scheme) 正如中的文档所述,如果我想在右侧插入空格,可以使用~mincolA 所以我用使用格式的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 "~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"