<< math + >>to access the word + in math. I was discussing this on
#concatenative, the Factor IRC channel, and Slava proposed something like
math-+for qualified naming. This would need to be prefixed by something like
QUALIFIED: mathto bring all of those math words in, under a qualified name.
I thought about it, and realized that it's possible to have pretty syntax without all of that renaming. Instead, the syntax
math: +could be used, where
math:is a parsing word defined by
QUALIFIED:. Think of it like a macro generating a macro, something possible in both Scheme and Lisp. Eager to stop what I was working on and do something useless, I wrote the following code, which implements this syntax. Again, it is amazing how easy this is to do in Factor. I don't know of another language that is so flexible yet structured with respect to naming.
Note that this qualified naming solution has the same problem as the previous one I discussed--it has the potential to break homoiconic syntax.
USING: kernel parser words hashtables assocs quotations sequences namespaces ;
: qual-quot ( vocab-name -- quot )
[ vocab scan swap at parsed ] curry ;
: qual-name ( vocab-name -- word-name )
CHAR: : add ;
: qual-word ( vocab-name -- quot )
[ qual-quot ] keep qual-name ""
[ swap define-compound ] keep
dup t "parsing" set-word-prop ;
: qual-vocab ( vocab-name -- vocab )
[ qual-word ] keep qual-name associate ;
: define-qual ( vocab-name -- )
qual-vocab use get push ;
scan define-qual ; parsing
For a while, I was getting off the mission of this blog--to do useless exercises in Factor which show how cool it is. Now, I think I'm getting back on track.