Back to index

LispMe Error Messages

The error codes in square brackets are the ones defined in lispme.h.

[S] Syntax Errors

When a syntax error is found during loading a memo, you go back to the load dialog. Now you can use the Edit button to jump directly to the offending source text to correct your mistake.

[S1] Invalid char

The LispMe reader encountered an invalid character. The help text shows the allowed characters.

[S2] Invalid symbolic expression

The LispMe reader encountered a token that cannot start a valid symbolic expression. This also happens, when the expression to be read is empty.

[S3] Multiple dots in list

More than one dot . occurred in a list, or more than one expression is written after the dot. Make sure that you didn't put a space into a floating point constant.

[S4] Max. token length exceeded

A single token (a symbol, number or string) must not contain more than 256 characters.

[S5] Invalid digit

The character read is not a valid digit in the current number base.

[S6] Invalid real number

The LispMe reader encountered an invalid floating point constant. Possible reasons are:

[S8] Invalid # constant

This error occurres, when there's an illegal character after the hash sign # in a constant. The only allowed # constants are Additionally, this error is raised when in a string containing hex escape sequences #hh one of the characters h is not a hexadecimal digit.

[S9] Unterminated string

When writing a string constant, you forgot the closing double quote ". Perhaps you wanted to include a " in the string and forgot to escape it with \. Or the last char in the string is a \ and you forgot to escape it, resulting in an escaped double quote.

[S10] Invalid complex number

The LispMe reader encountered an invalid complex number. Possible reasons are:

[C] Compiler Errors

When a memo is syntactically correct, no more source positions are recorded. So, if there's a compiler error, LispMe hasn't enough information to find the offending position in the source text. Thus when pressing the Edit button after an unsuccessfull load, you simply go to the beginning of the selected memo.

[C1] Undefined name

The given name is not defined in the lexical environment. Check for a spelling error or for having loaded all required memos.

[C2] Wrong number of arguments

The number of arguments for the noted special form or built-in procedure is wrong.

[C3] expr is not a symbol

expr was found, when there was a variable name expected in the special forms define, let, letrec, or set!.

[C4] Invalid variable binding

The variable binding list of a do, let, let*, or letrec form is not a proper variable binding list.

[C5] Invalid lambda args

The argument list for the lambda special form has not one the three allowed shapes. This also applies to the second form of define.

[C6] Improper argument list

An expression list in a function call is not a proper list.

[C7] Duplicate name

A variable name to be bound occurred twice in a lambda-, let- or letrec-binding list. Also when the same toplevel name is defined twice in a loaded memo.

[C8] Invalid let list

The variable bindings expected are not a proper list.

[C9] Definition in invalid context

A define expression is not allowed in this context. Definitions must appear before all other expressions in an expression sequence.

[C10] Empty expression sequence

An expression sequence in the body of a begin-, cond-, lambda-, let- or letrec-form is empty. It must contain at least one expression.

[C11] Invalid case/cond clause

A case or cond clause is not of the form (guard expr1 expr2 ...).

[C12] Keyword used as a variable

The name given has a special definition as a keyword for a syntactic form and can't be used as a variable name.

[C13] unquote(-splicing) invalid outside of quasiquote

One of the special forms unquote or unquote-splicing appeared outside of the special form quasiquote or the nesting depth of quasiquote expressions has reached zero by outer unquotes.

[C14] unquote-splicing allowed in list or vector template only

unquote-splicing didn't appear in a list or a vector template, so there wouldn't be a valid context into which the resulting list could be spliced.

[C15] Invalid definition

A definition (see define) has not of one of the allowed shapes.

[C16] Macro too complex

For technical reasons, compilation can't be interrupted by the Break button. So, to avoid infinite loops while compiling, there are two fixed limits for expanding a macro (which indeed calls the VM for its duty): If you should encounter a situation where these limits are too tight, please send me an email including the code you tried to compile, but watch out for non-terminating macros like (macro (defunct x) x) before.

[C17] Too many variables

LispMe can address at most 256 variables in a single environment frame and a maximum of 64 nested frames. You are very unlikely to hit this limit, but if you do, please send a mail.

Runtime Errors

[R1] expr is not a type

This is the classical runtime type error. This error is also raised, when a number is to large to be coerced to an integer by integer

[R2] Invalid index expr

The index doesn't specify a valid address. String and vector accesses require their index in the range [0..16384[

[R3] Function expected n arguments, but got m as follows: expr

A function expecting n arguments was called with a wrong number of arguments, namely m. The actual argument list is printed in this error message as expr.

[R4] expr should have type type but actually was expr'

A more specific version of error [R1].

[R5] No IO hook defined for port expr

There is no call-back function defined for the port indicated. All extension port modules have to define and register a call-back function.

[R7] Illegal opcode

The LispMe virtual machine (VM) encountered an illegal opcode. This is a severe internal error produced by a buggy LispMe compiler (you should never see this error message), so please send mail to me with a report what caused this message.

However, if you got this error by messing around with the list returned by disasm, this is your own fault, so don't blame me.

[R8] Division by zero

Caused by integer and floating point division.

[R9] Sucked into black hole

During evaluation of the local definitions in a letrec form, the value of one of the variables just being bound was accessed. An access to the value of any variable in the binding list will cause this error while the expressions to initialize these variables are evaluated. These variables may be used inside a lambda or delay special form, as in this case their value will not be needed during evaluation of these forms.

[R10] No matching case/cond clause

All of the guards in a cond form evaluated to false or the value of the expression in a case form is not in any of the constant lists. Both cases can only happen, when the else keyword is absent.

[R11] Native function f can't be called with n arguments.

The native function doesn't allow calling with the specified number of arguments.

[R12] Can't call transcendental functions without MathLib

The mathematics library MathLib.prc (included in this package) has not been installed, so calls to transcendental functions like sin fail. The functions needing MathLib are marked in the Catalog of Language Elements.

[R13] Port has been closed

There was an attempt to output to a closed port or to input from a closed port.

[R14] Non-matching types in comparison

The two objects compared by one of the procedures < <= > >= have non-compatible types.

[R15] Invalid parameter parm for proc

The parameter parm is invalid for the built-in procedure proc. Have a look at the catalog for valid arguments.

[R16] Can't create file

A new file can't be created for output. Probably there's not enough memory left on your Pilot, or (for DOC files) a file with the specified name already exists.

[R17] File not found

The file to be opened for input can't be found. Look for a spelling error in the file name (this is always the first line of the memo).

[R18] File associated with port vanished

A file which is currently open (either for reading or writing) has been deleted. Just simply don't do that!

[R19] Can't write to file

LispMe can't resize the file to append the output. Probably there's not enough memory left on your Pilot.

[R20] Improper list or tree

One of the lists compared by equal? contains a cycle.

[M] Memory Errors

[M1] Atom space exhausted

There's not enough memory for a new symbol to be allocated. Symbols are not garbage collected, so this error may occur if you loaded and popped several different memos, as all symbols used so far accumulate in the atom space. So use the command Reset Heap, or if this doesn't help, increase the atom size via the Memory sizes dialog.

[M2] Invalid pointer

A pointer in the LispMe heap has an invalid type tag. This is a severe internal error produced by a buggy LispMe compiler or VM (you should never see this error message), so please send mail to me with a report what caused this message.

[M3] Can't create session name

The database for the new session name couldn't be created. There are several reasons for that, which are indicated within this error message: