Philosophical musings: interpreting models

Jim Little
Wed, 15 Sep 1999 01:27:51 -0600

Sorry for the delayed reply -- I was gone over the weekend. wrote:
> I don't understand Jim's insistence.  Jim, why is Lisp low-level?

Although I already addressed this in my response to Laurent, I'd like to
take this opportunity to talk about my definitions of low and high

To me, the "level" of a language or library is directly related to what
kind of task you're trying to accomplish.  The language or library is
high-level if it allows you to accomplish your task directly, without
having to specify any intermediate tasks.  The language or library is
low-level if it requires you to accomplish your task by specifying
intermediate tasks, rather than the task itself.

Here's an example of a high-level language.  The task is to dial a
dial 555-1212.

The same task in a low(er)-level language:
pick up handset
press 5
press 5
press 5
press 1
press 2
press 1
press 2

Another way to look at it is to say that the fewer lines of code your
program requires, the higher-level language you are using.  This
approach also demonstrates the analog rather than discrete nature of
"levels".  A language isn't so much "low" or "high" level -- it's
"lower" or "higher" level.

That's why I say Lisp is a low-level language -- for most tasks, its
semantics aren't even close to those required for the task at hand. 
Yes, you can write high-level functions, but there's a difference
between a high-level language and a low-level language with high-level
functions, which I address in my email to Laurent.


PS: The ultimate high-level language, of course, is DWIWRN* -- it
contains only one instruction, and all programs have only one line of

*DWIWRN is an acronym for "Do What I Want, Right Now**"

**DWIWRN is the successor to DWIW, which was a revolutionary language
for its time but which didn't gain widespread acceptance.  DWIM worked
very well but was hobbled because no one could prove that its programs
would complete in a finite amount of time.