在罗塞塔码中,我使用以下方法连接Forth中的字符串。
s" hello" pad place
pad count type
s" there!" pad +place
pad count type使用此代码,我希望能够将多个字符串连接在一起。但是,以下内容在Gforth上失败了
s" hi " pad place
s" hello " pad place
s" world" pad
+place
pad +place
pad count type从我的基本Forth公开中,我看到代码将三个字符串放在堆栈上,然后在堆栈顶部加上下面的字符串,然后用底部的字符串在堆栈上追加新字符串。
为什么这个代码会在最后一个+位置下运行呢?有办法绕道吗?
发布于 2014-03-12 19:46:05
第二个片段将"hi“复制到内存位置pad,然后将"hello”复制到同一个位置(覆盖"hi ")。
因此,当您尝试第一个+place时,它从堆栈中获取"world“的addr u引用,然后将"world”附加到"hello“。所以如果你试着
s" hi " pad place
s" hello " pad place
s" world" pad +place
//Display the string at pad
pad count type你应该看看hello world ok
此时,您的所有place或+place单词都用完了堆栈上的所有字符串引用。如果你刚刚运行
s" hi " pad place
s" hello " pad place
s" world" pad
+place
//Check the stack
.s你会看到一个空堆栈。
现在,当您再次使用pad时,它会将pad所代表的地址推到堆栈中。因此,下一个+place在堆栈上没有字符串引用供其复制,因此失败。
要解决这个问题,你需要的是这样的东西
s" hi " pad place
s" hello " pad +place
s" world" pad +place
pad count type在这段代码中,"hello“不覆盖"hi”,而是附加到它之后,因此下一个+place在堆栈上有正确的参数,并按预期工作。
https://stackoverflow.com/questions/22360976
复制相似问题