经过大约几个小时的尝试和错误,我不知道该怎么做…以下是我正在处理的代码:
: format
( n ds -- )
>r cr .s
dup cr .s
>r cr .s
abs cr .s
s>d cr .s
<# [char] bl hold #s r> sign #> cr .s
r@ cr .s
dup cr .s
c@ cr .s
dup >r cr .s
chars + cr .s
char+ cr .s
swap cr .s
dup cr .s
>r cr .s
cmove cr .s
r> r> + cr .s
r> cr .s
c!
;
顺便说一句。。。不是有一种更简单的方法可以打印输出吗,类似于printf
的东西会很棒。另一种可能性是将空格字符指定为s" "
类型字符串的第一个字符。
编辑:
我发现我可以做到:Gforth中的s" 40 test"
(尽管手册上说它不是标准的)。s" x20 test"
可能是标准的,但我不太明白句子中说它是否标准的部分在哪里。尽管如此,我还是很高兴知道如何将其与图片数字输出相结合。
EDIT2
这就是我所期望的使用方式:
create test 256 allot
s" prefix " test place
123 test format
s" suffix" test place+
test count type prefix 123 suffix
我认为对于这个例子,您不需要在<# #>
中添加空格。可以使用s"
定义带有前导空格或尾随空格的字符串。
所以如果你从开始
Push addresses and lengths for the prefix and the number
s" prefix " -- addr u
123 s>d <# #s #> addr u -- addr u addr2 u2
你想要的单词是连接它们的东西,例如:
: concatenate
Moves the string addr2 u2 to the end of the string addr u
>r >r addr u addr2 u2 -- addr u
dup >r over r> + r> addr u -- addr u addr+u addr2
swap r@ addr u -- addr u addr2 addr+u u2
cmove r> + ; addr u addr2 addr+u u2 -- addr u+u2
因此,如果您调用它并输出这样的结果字符串:
concatenate type
输出为"前缀123"
然后,您可以将相同的单词应用于字符串"前缀123"one_answers"后缀"。
这并没有使用与您的示例完全相同的内存位置,但它可以进行调整,这是我演示它的最简单方法
作为对评论的回应,您似乎非常接近于在图片输出中嵌入字符,我认为您只需要删除[char]
,例如
123 s>d <# # bl hold # bl hold # #>
应生成类似"1 2 3"的字符串