Note that since you aren't using them as syntax you could name your operations with traditional operator characters
if (cmp(a,">",10)
becomes
if (>(a, 10)
Or you could use > as a constant and have
if (cmp(a, >, 10)
Also, I assume from your example you are treating linefeeds as commas in a parameter list (with trailing linefeeds in a parameter list being ignored)? Or would it be more consistent to separate the statements with commas and ignore linefeeds?
And how would you do a if/else? Require a 'block' function in your if function?
if(>(a, 10), block( ... code here ... ), block( ... code here ... )),
Or did I just reinvent lambda?
PS: Turn
// comment
into
rem("comment")
and you could have some kind of runtime comment processing
I should really go to sleep now.