Forth局部变量赋值:能否将某变量的输出值赋给另一变量c?
在Forth中给变量赋值当然可行!
完全没问题~Forth作为栈式语言,变量赋值的逻辑其实很直接,核心就是利用栈来传递值。咱们结合局部变量的场景来具体看怎么做:
基础局部变量赋值(用LOCAL和@/!)
大部分现代Forth实现(比如Gforth)支持用LOCAL定义局部变量,你可以这样把一个局部变量的值赋值给另一个:
: assign-local LOCAL src dest \ 定义两个局部变量:src(源变量)、dest(对应你说的变量c) 100 src ! \ 给src赋值100(`!` 是把栈顶值存入变量) src @ \ 把src的值取到栈顶(`@` 是读取变量的值到栈) dest ! \ 把栈顶的值存入dest,完成赋值 dest @ . \ 输出dest的值,会打印100 ;
调用assign-local就能看到预期结果啦。
用VALUE简化赋值
如果你用VALUE类型的局部变量(更简洁的赋值语法),代码会更直观:
: assign-value-local LOCAL VALUE src LOCAL VALUE dest 200 TO src \ 给src赋值200 src TO dest \ 把src的值传递给dest dest . \ 输出dest的值,打印200 ;
这里TO操作符会自动处理栈的读写,本质和@/!逻辑一致,只是语法更友好。
小提醒
- 局部变量只在定义它的词(
: ... ;代码块)内部有效,出了这个词就无法访问了。 - 不同Forth系统的局部变量语法可能略有差异,比如有些用
{ src dest }代替LOCAL src dest,但核心的@/!操作逻辑是通用的。
内容的提问来源于stack exchange,提问作者Softey
相关产品推荐
相关产品推荐

