-
Notifications
You must be signed in to change notification settings - Fork 9
Home
Tcl commands and Forth words are closely related. Both are called by their interpreters to compile or execute. Both, in effect, create the programming language, and both languages can be changed and extended by the programmer. The deciding difference is notation.
Tcl uses formal prefix notation for command arguments and an infix interpreter for math expressions. If we add a way to pass arguments on a stack, Tcl would be postfix, and a postfix Tcl is a Forth system: TclForth.
Study it with a few commands in the Forth console and the resulting Tcl code in the Code window (open it in the Setup menu).
Here is a Tcl command 'write' defined and used in the Forth console.
tcl proc write {text} {printnl $text}
tcl write "Hello World!"
Hello World!
ok
The initial word tcl passes the subsequent text to the Tcl-interpreter.
The same function as a code word in Forth:
Code Write { text -- } printnl $text
TclForth compiles it into
proc Write {} {
set text [pop] ; printnl $text
}
and passes the code to the Tcl interpreter.
Tcl and thus TclForth names are case-sensitive.
"Hello World!" Write
Hello World!
ok
The only change needed to convert the Tcl command into a Forth word was the addition of "set text [pop] ;"
in front of the code, which turns the stack argument 'text' into a local variable with this name. And we need a stack for the parameter.
The standard Forth definition of text messages is provided by
Compiler ."
PushText ; appendcode "print \[pop\] ; "
: Hello {} ." Hello world" ;
TclForth provides the standard set of Forth words as far as they make sense. Lookup the words in the files forth.fth and tk.fth. And note how the terms are applied in console.fth.
To use TclForth, you will want some knowledge of Tcl