This is a LISP (Scheme) interpreter written in QBASIC.
It implements linked lists using arrays. It supports optimized
proper tail recursion
if and only if your BASIC compiler optimizes tail calls
(so no for Microsoft QBASIC, yes for FreeBASIC).
It does not have garbage collection, and integers are BASIC INTEGERS, not
bignums (if you remove DEFINT A-Z, numbers become SINGLEs instead;
similarly, if you replace it with DEFLNG A-Z, numbers become LONGS;
one can also change the types of the heap array and of variables
individually in APPLY and READ).
Why does this exist?
I wanted to write an interpreter and was stuck on a Windows XP laptop without
Internet. It turned out that QBASIC.EXE was saved somewhere, so I used that.