Jack Hughes
Jack Hughes

Reputation: 5664

Why is a Lisp file not a list of statements?

I've been learning Scheme through the Little Schemer book and it strikes me as odd that a file in Scheme / Lisp isn't a list of statements. I mean, everything is supposed to be a list in Lisp, but a file full of statements doesn't look like a list to me. Is it represented as a list underneath? Seems odd that it isn't a list in the file.

For instance...

#lang scheme

(define atom?
    (lambda (x)
    (and (not (pair? x)) (not (null? x)))))

(define sub1
    (lambda (x y)
    (- x y)))

(define add1
    (lambda (x y)
    (+ x y)))

(define zero?
    (lambda (x)
    (= x 0)))

Each define statement is a list, but there is no list of define statements.

Upvotes: 1

Views: 177

Answers (2)

Mark Karpov
Mark Karpov

Reputation: 7599

It is not, because there is no practical reasons for it. In fact, series of define statements change internal state of the language. Information about the state can be accessible via functions. For example , you can ask Lisp if some symbol is bound to a function.

There is no practical benefit in traversing all entered forms (for example, define forms). I suppose that this approach (all statements are elements of a list) would lead to code that would be hard to read.

Also, I think it not quite correct to think that "everything is supposed to be a list in Lisp", since there are also some atomic types, which are quite self-sufficient.

Upvotes: 2

Paul Richter
Paul Richter

Reputation: 6311

When you evaluate a form, if the form defines something, that definition is added to the environment, and that environment is (or can be) a single list. You can build a program without using files, by just typing definitions into the REPL. In Lisp as in any language, the program “lives” in the run-time environment, not the source files.

Upvotes: 0

Related Questions