Node:Lisp support, Next:Function and Variable Index, Previous:System interface, Up:Top
An expression in Lisp/Scheme syntax may entered by
prefixing it with the Scheme
keyword.
The expression is read using a programmable Lisp reader.
Then the resulting Lisp object is converted to a Q expression
for evaluation.
Q1> print_readable:=1 Q2> Scheme (quote (:foo #(3 4 5))) ['foo [3 4 5]]
To print an object in Lisp/Scheme syntax, set the print_lisp
variable:
Q3> print_lisp:=1 Q4> Scheme '(:foo #(3 4 5))) (:foo #(3 4 5))
The only special form that has been implemented is quote
,
so the Scheme
keyword has limited usefulness.
A number of issues also need to be resolved, such as
the representation of the empty list/sequence
(Scheme 'nil
vs. Scheme '()
vs. []
).
A number of functions from Common Lisp and the Scheme R3 report have been implemented. You can use them in Q code:
Q5> Scheme (symbol->string 'abc) "abc" Q6> (Lisp #'find-package) "common-lisp" package "common-lisp"
Right now, you can also just name Lisp function directly in Q code, since Scheme, Lisp, and Q use the same global name space. This will probably change:
Q7> symbol\-\>string 'abc "abc"Note that
->
had to be "quoted" with \
s.
The following Common Lisp functions and values have been implemented: car, cdr, cddr, cadr, cons lispread (calls the Lisp reader) nil, t vector integer-length getprop, putprop, remprop, symbol-plist, symbol-package make-symbol find-package symbol-function, symbol-value, set, boundp, fboundp, makunbound, fmakunbound
The following Scheme functions have been implemented: car, cdr, cddr, cadr, cons vector, make-vector, vector-fill! symbol->string, string->symbol
The only recognized declare
form is a non-standard one:
(declare (external Foo))
in the body of a function declares that
when the function is compiled, the name of the emitted C++ function should
be Foo
.
(declare (external "Foo"))
is the same, except that it declares
that the assembler label of the function is Foo
.
If the there are no forms in the function following a
(declare (external ...))
form then the function is assumed
to be defined in some external C++ file. See C interface.