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.