### 8.2 Scheme fundamentals ¶

But you want more now, don’t you, not just be referred to some other book. OK here goes.

Syntax: an expression is an atom or a list. A list consists of a left paren, a number of expressions and right paren. Atoms can be symbols, numbers, strings or other special types like functions, hash tables, arrays, etc.

Semantics: All expressions can be evaluated. Lists are evaluated as function calls. When evaluating a list all the members of the list are evaluated first then the first item (a function) is called with the remaining items in the list as arguments. Atoms are evaluated depending on their type: symbols are evaluated as variables returning their values. Numbers, strings, functions, etc. evaluate to themselves.

Comments are started by a semicolon and run until end of line.

And that’s it. There is nothing more to the language that. But just in case you can’t follow the consequences of that, here are some key examples.

    festival> (+ 2 3)
    5
    festival> (set! a 4)
    4
    festival> (* 3 a)
    12
    festival> (define (add a b) (+ a b))
    #<CLOSURE (a b) (+ a b)>
    festival> (add 3 4)
    7
    festival> (set! alist '(apples pears bananas))
    (apples pears bananas)
    festival> (car alist)
    apples
    festival> (cdr alist)
    (pears bananas)
    festival> (set! blist (cons 'oranges alist))
    (oranges apples pears bananas)
    festival> (append alist blist)
    (apples pears bananas oranges apples pears bananas)
    festival> (cons alist blist)
    ((apples pears bananas) oranges apples pears bananas)
    festival> (length alist)
    3
    festival> (length (append alist blist))
    7