By using the option Case-sensitive symbols you can determine, if symbols are case-insensitive or not. Case-insensitive symbols are generally converted to lower case. This also applies to accented/national characters, as the Pilot ROM routines converts these characters correctly.
LispMe supports integers with radix specifications, where #b means binary, #o octal, #d decimal, and #x hexadecimal. LispMe accepts real numbers according to this grammar:
real ::= [sign] ureal.
ureal ::= mantissa [exponent]
| radix r-digit+.
sign ::= '+' | '-'.
mantissa ::= digit+ ['.' digit*]
| '.' digit+.
exponent ::= ('e' | 'E') ['+' | '-'] digit+.
radix ::= '#b' | '#B' | '#o' | '#O' | '#d' | '#D' | '#x' | '#X'.
Real numbers are represented in IEEE-754 64 bit double
precision format, which means about 15 decimal digits accuracy.Complex numbers can be written according to this grammar:
complex ::= real
| real sign ureal i-unit
| real i-unit
| sign i-unit
| real '@' real.
i-unit ::= 'i' | 'I'.
The @-syntax denotes complex numbers in polar form,
left to the @ is the magnitude, right is the angle.In LispMe all integer numbers are considered exact?, real and complex numbers are considered inexact?.
In contrast to C or C++, you can have #00 bytes in a string.
In LispMe even string constants are mutable, so expressions like (string-set! "foo" 0 #\b) (evaluating to "boo") are allowed.
(a.1) is read as (a 0.1) (list)
(a. 1) is read as (a . 1) (dotted pair)
A list is either a special value () called the empty list, or a pair, whose cdr component is a list, for example (1 . (2 . (3 . ()))) There's also a shorter syntax for lists which omits both the dot and the parentheses around the cdr component, so this example can also be written (1 2 3). Lists of these form (the last cdr is the empty list) are called proper lists. Improper lists don't have the empty list as their last cdr, like (1 . (2 . (3 . 4))), which can be written as (1 2 3 . 4), too. It's an error to write more than one dot in a list.
(+ 3 (* 7 4)) (foo bar) quux
and
(+ 3 (* 7 4
both read as (+ 3 (* 7 4)) and evaluate to 31.
When loading memos, (begin is stuffed into the read buffer before the actual memo contents is read, so a source memo must be a sequence of define expressions not enclosed in parentheses. Instead, the outermost list is automatically completed by the loading mechanism.
expression ::= literal
| identifier
| special_form
| application
| (quasiquote qq-template)
| `qq-template
literal ::= number
| character
| string
| #f | #t | #n | '()
| #( object* )
| (quote object)
| 'object
special_form ::= (keyword component*)
application ::= (expression+)
qq-template ::= object including unquote and
unquote-splicing special forms
object means the written representation of any LispMe object
and component is a syntactic component different for
(and described at) each keyword in the LispMe catalog.
This grammar is ambiguous due to special forms, but this ambiguity is
resolved by reserving names used as keywords in special forms. A
qq-template may be any LispMe object but is most commonly
a list or vector, which may contain
unquote and
unquote-splicing
special forms.
| and | begin | case | cond | define |
| delay | else | if | lambda | let |
| letrec | or | quasiquote | quote | set! |
| unquote | unquote-splicing |