Thanks Rob!
OxyLISP doesn't support macros or syntax rules but only
(define)'s.
In order to bypass this restriction to some extent and be able to create (for now hardcode only!) new "encompassing" syntactic forms which weren't available in Arthur's original Lisp-in-Basic, such as
(mute <expression1> . . . )(when <test> <expression1> . . . )(unless <test> <expression1> . . . )(do ((<variable1> <init1> <step1>) . . . )
(<test> <expression> . . . )
<command> . . . )and others that can't be expressed in terms of simple
(define)'s and
(lambda)'s, I had to re-write practically all
GOTO's in the sources to
GOSUB/
RET's. That would be equivalent to full blown
SUB/
END SUB's without arguments, and it would make interpreted SBLisp and FBLisp run yet at least 1.5 times slower than before, slow as they are now.
But OxyLISP's assembly
call/
ret's (equivalent to GOSUB/RET's) that replaced
jmp's (former GOTO's) are indeed so fast that I'm not seeing any detectable speed deterioration due to such changes. This makes me very enthusiastic about the expandability of OxyLISP's vocabulary even though it can be achieved only by hardcoding rather than macros when defines and lambdas are insufficient.
P.S. Are (first) and (rest) simple aliases to (car) and (cdr)?