is a simple Lisp interpreter that implements most of the common Lisp constructs. It may be useful for learning the basis of the Lisp language. The options are as follows: Be more verbose. Print version information on standard output then exit. Provide warnings about constructs that are dubious or may be illegal in other Lisp implementations. The built-in functions are summarized below: Return the sum of the arguments. Negate number or subtract numbers; With one argument, negates it. With more than one arguments, subtracts all but the first from the first. Return the product of the arguments. Returns first argument divided by all the remaining arguments. Returns remainder (modulus) of divided by Return T if first argument is less than second argument. Return T if first argument is less then or equal to second argument. Return T if first argument is greater than second argument. Return T if first argument is greater then or equal to second argument. Return T if the two arguments are equal. Eval the arguments until one of them yields nil, then return nil. The remaining arguments are not evalled at all. If no argument yields nil, return the last argument's value. Eval the arguments until one of them yields non-nil, then return that value. The remaining arguments are not evalled at all. If all arguments return nil, return nil. Return T if the argument is nil. Return T if the argument is not a cons cell. This includes nil. Return the car of If the argument is nil, return nil. Return the cdr of If the argument is nil, return nil. If yields non-nil, do else do Returns the value of or the value of the last If yields nil, do else return nil. If yields non-nil, do else return nil. If yields non- nil, eval and repeat. The order of execution is thus and so on until returns nil. Eval and sequentially; return the value from The value of is saved during the evaluation of the remaining arguments, whose values are discarded. Eval and sequentially; return the value from The value of is saved during the evaluation of the remaining arguments, whose values are discarded. Eval forms sequentially and return value of last one. Try each clause until one succeeds. Each clause looks like (cond body...). is evaluated and, if the value is non-nil, this clause succeeds; then the expressions in are evaluated and the last one's value is the value of the cond-form. If no clause succeeds, cond returns nil. If a clause has one element, as in (cond), the value if non-nil is returned from the cond-form. Create a new cons, give it and as components, and return it. Define as a function. Return T if the two arguments are the same Lisp object. Evaluate and return its value. Reclaim storage for Lisp objects no longer needed. is a synonymous of Return a newly created list with specified arguments as elements. Any number of arguments, even zero arguments, are allowed. Return T if the argument is nil. Output the printed representation of the arguments. Return the argument, without evaluating it. Set the value to and return Set each to the value of its The symbols are variables; they are literal (not evaluated). The values are expressions; they are evaluated. The second is not computed until after the first is set, and so on; each can use the new value of variables set earlier in the The return value of the form is the value of the last is a synonymous of Dump the set variables to the specified file. Sandro Sigala (ssigala@globalnet.it)