Okay, so what's the significance of it and what's the boon?
Surprised so little public forth's implement it.
Surprised so little public forth's implement it.
: COUNTER
CREATE ,
DOES> DUP 1 SWAP +! @ ;
0 COUNTER PK
PK . \ => 1
PK . \ => 2
A semi-equivalent in Javascript is: const counter = init => {
let x = init;
return () => { x += 1; return x; };
};
const pk = counter(0);
console.log(pk()); // => 1
console.log(pk()); // => 2What’s funny, is that I used to know how it works, now any time I come across these kind of articles I get more and more confused and further away from understanding. It’s like reading those convoluted explanations of what a monad is.
It does this by doing something now, and later (you could read create does> as now later>)
So for
: CONSTANT CREATE , >DOES @ ;
This makes the defining word CONSTANT, which when run (now) compiles the next word
So CONSTANT myvar will compile myvar. Myvar, when run (later) will get it's value and push it to the datastack.