Abstract
This is a list of frequently asked questions about CLISP on the CLISP mailing lists and the USENET newsgroup comp.lang.lisp. All the legitimate technical question are addressed in the CLISP documentation (CLISP impnotes, clisp(1), clisp-link(1)), and for such questions this list provides a link into the docs. The frequently asked political questions are answered here in full detail (meaning that no further explanations of the issues could be provided).
Please submit more questions (and answers!) to clisp-list.
A.1. Meta Information | |||||||||||||
| |||||||||||||
A.1.1. Miscellaneous | |||||||||||||
| |||||||||||||
A.1.1.1. | What is “FAQ fine”? | ||||||||||||
We levy a fine of 10 zorkmids for asking a question that is answered with a link to this FAQ document. We further levy a fine of 1 zorkmid for asking a question that is answered with a link to the CLISP manual. The fines are payable to the person who answered the questions. The definition of a “zorkmid” is left to the sole discretion of the payer. This should not discourage you from asking questions, but rather encourage you to read the manual and answer questions from other users. | |||||||||||||
A.1.1.2. | The official CLISP documentation sucks - is anything better available? | ||||||||||||
As with all generic complaints, the answer to this one is PTC. Additionally, the nightly builds of the CLISP implementation
notes documenting the current CVS | |||||||||||||
A.1.1.3. | |||||||||||||
Because CLISP uses GNU readline. Note that this does not necessarily prevent you from distributing
your proprietary products based on CLISP. See Note
in | |||||||||||||
A.1.1.4. | What about [ANSI CL standard] compliance? | ||||||||||||
CLISP purports to conform to the [ANSI CL standard] specification, so all deviations in
from the [ANSI CL standard] are bugs and are not (yet) fixed only due to lack of resources. On the other hand, some decisions made by the ANSI X3J13 committee were not as justified from the technical point of view as were most of them, and some of those questionable decisions were made after the alternative behavior has already been implemented in CLISP. The CLISP developers took pains to modify CLISP to unconditionally comply with the [ANSI CL standard] specification in all cases except for a handful of situations where they believed that the committee had made a mistake, in which cases the committee behavior is still optionally available. CLISP does not start in the ansi mode by default for historical reasons and this is not about to change. Dumping an image or passing a command line argument are easy enough. | |||||||||||||
A.1.1.5. | How do I ask for help? | ||||||||||||
Type help and hit Enter. | |||||||||||||
Human | Politely - please refer to If you have a question about CLISP, you have the following options (listed in the order of decreasing audience size):
Mailing lists are member-onlyTo avoid spam, we require that you subscribe before you can post to a mailing list. Alternatively, you can post to the CLISP web forum and your message will be forwarded to the clisp-list mailing list. If you read a list on Gmane and do not want to receive it also by e-mail, you can subscribe to it using the aforementioned web interface and then disable mail delivery. | ||||||||||||
A.1.1.6. | Which mailing lists should I subscribe to? | ||||||||||||
Cross-posting in the CLISP mailing lists is very actively discouraged and is virtually non-existent, thus you can subscribe to all mailing lists that are relevant to you without getting duplicate messages:
| |||||||||||||
A.1.1.7. | Why is my mail to a mailing list rejected? | ||||||||||||
CLISP mailing lists get a lot of spam, so the
maintainers have to take care to protect the users. If you get a note
that “your message is held for moderator's approval”, you
can safely assume that it went
to
If you do not like this policy, please volunteer to maintain the mailing lists - you will be required to go through all the “held for moderator's approval” mail and approve/discard as appropriate at least twice a day. | |||||||||||||
A.1.1.8. | How do I report bugs? | ||||||||||||
A.1.1.9. | How do I help? | ||||||||||||
Please read Chapter 36, Extending CLISP Core and submit your patch,
together with a See If your patch is more than just a few lines, it is much preferred that you make your patch available on the web and send the link to the list. The patch must be against the CVS head (reasonably recent). | |||||||||||||
A.1.1.10. | How do I debug CLISP? | ||||||||||||
Configuring for debugging. Passing
When debugging a base module, use base instead of full and boot above. The impact of generational garbage-collector. If your CLISP was built with generational garbage-collector, you will see
plenty of spurious segfaults (that's how the generational garbage-collector
works). At the end of handle SIGSEGV noprint nostop break sigsegv_handler_failed which will stop execution on a dangerous segfault. You can find out whether this is needed by examining the output of the following command:
Useful commands. You are encouraged to make use of commands defined in
and others; help Macros. CLISP makes heavy use of cpp macros
(e.g., Binary Search in Time. When you encounter an regression error (i.e., something worked in a previous version of CLISP, but does not work in the current version) which we cannot reproduce, we will often ask you to figure out which specific CVS commit introduced it. The way to figure that out is to use the binary search in time, specifically:
See output of CVS log for the acceptable date format for CVS co -D. | |||||||||||||
A.1.2. Logo | |||||||||||||
| |||||||||||||
A.1.2.1. | Why is CLISP using menorah as the logo? | ||||||||||||
Whimsical | If you must have some answer and you do not care whether it is correct or not, you may simply think that Common Lisp brings the Light to a programmer, and CLISP is a vehicle that carries the Light. Accordingly, CLISP enables you to see the truth, thus you can pronounce it as see-lisp. Alternatively, if you are a seasoned expert, you might pronounce it as sea-lisp. | ||||||||||||
Historical | CLISP has been using the menorah for the logo since the project was first started in the late 1980-ies by Bruno Haible and Michael Stoll. This probably reflects the authors' affection toward the Jewish people, Judaism or the State of Israel (neither of the two original authors is Jewish by birth). You may ask the original authors for details yourself. Both of them are very busy though, so do not expect a prompt reply. | ||||||||||||
A.1.2.2. | Shouldn't the logo be changed now due to the current political developments in the Middle East? | ||||||||||||
The CLISP developers, both the original creators and the current maintainers, do not subscribe to the mainstream view that blames the Jews for everything from high oil prices and Islamic extremism to El Niño and global warming (or cooling, whatever the looming disaster du jour is). Moreover, today, when Jews are being pushed out of the American and European academic institutions with various obscene boycott and divestment campaigns, it is crucial for all of us to stand together against the resurgence of Nazism. For more information, please see: | |||||||||||||
A.1.2.3. | Aren't there other political issues of concern? | ||||||||||||
Yes, there are! For example, in 1989 the
communist
government of the People's
Republic of China murdered some 3000+
student human rights protesters at the Tienanmen square in Beijing,
and people appear to have already forgotten this crime.
A note to that effect was kept in the file
We also oppose software patents and support other liberal (i.e., pro-liberty) causes. | |||||||||||||
A.1.2.4. | Aren't you afraid of losing some users who are offended by the logo? | ||||||||||||
Do you have in mind people like this one? Good riddance! | |||||||||||||
A.1.2.5. | Using software to promote a political agenda is unprofessional! | ||||||||||||
Expressing their opinion is a perfectly natural thing for the authors, be it artistic preferences, political views or religious beliefs. The use of the menorah has its roots somewhere between these areas, and the authors are proud to display it. If you are unlucky enough to have lost the freedom to express your opinion, due to the constraints of a government, society, religion, or expectations of “professional relationships”, the Free World condoles with you. The authors of CLISP are not operating under such constraints. If you are unhappy about their artistic preferences, political views or religious beliefs, you are free to ignore them. Many scientists have been doing art, politics and religion. René Descartes and Isaak Newton combined mathematics and Christianity. Albert Einstein helped the U.S. to counter the danger of an atomic bomb in the hands of the Nazis. Bram Moolenaar, the author of VIM, promotes charitable donations to Uganda. | |||||||||||||
A.2. Running CLISP | |||||||||||||
| |||||||||||||
A.2.1. | Why are floats printed in binary? Where is | ||||||||||||
Pass | |||||||||||||
A.2.2. | Where is the IDE? | ||||||||||||
Emacs-based | |||||||||||||
non-Emacs-based | |||||||||||||
A.2.3. | What are the command line arguments? | ||||||||||||
See clisp(1). | |||||||||||||
A.2.4. | How do I get out of the debugger? | ||||||||||||
A.2.5. | What CLISP extensions are available? | ||||||||||||
bundled | Quite a few modules are
included with CLISP,
pass | ||||||||||||
3rd party | See the incomplete list of “Common Lisp software running in CLISP”. | ||||||||||||
DIY | See Section 32.2, “External Modules” and Section 32.3, “The Foreign Function Call Facility” for information on how to interface with external C libraries. | ||||||||||||
Very Frequently Asked!
Both AllegroServe and CL-HTTP require multithreading and do not work with CLISP yet. | |||||||||||||
A.2.6. | Where is the init (“RC”) file on my platform? | ||||||||||||
Read the file | |||||||||||||
A.2.7. | Where are the modules with which I built CLISP? | ||||||||||||
In the full linking set. Run CLISP like this:
Unless your CLISP was configured with option Making base the default linking set has some advantages:
See clisp-list for more information
( | |||||||||||||
A.2.8. | How do I create a GUI for my CLISP program? | ||||||||||||
Use module
There are many other options, see "Common Lisp software running in CLISP". | |||||||||||||
A.3. Application Delivery | |||||||||||||
A.3.1. | How do I create an executable file with all my code in it? | ||||||||||||
Use | |||||||||||||
A.3.2. | When I deliver my application with CLISP, does it have to be covered by the GNU GPL? | ||||||||||||
Not necessarily. CLISP is Free
Software, covered by the GNU GPL, with special
terms governing the distribution of applications that run in CLISP.
The precise terms can be found in the
In many cases, CLISP does not force an application to be covered by the GNU GPL. Nevertheless, we encourage you to release your software under an open source license. The benefits of such a license for your users are numerous, in particular they are free to modify the application when their needs/requirements change, and they are free to recompile the application when they upgrade their machine or operating system. CLISP extensions, i.e. programs which need to access non-portable CLISP internal symbols (in the packages “SYSTEM”, “CLOS”, “FFI”, etc), must be covered by GNU GPL as well. Other programs running in CLISP have to or need not to be placed under GNU GPL, depending on their distribution form:
| |||||||||||||
A.4. Troubles | |||||||||||||
| |||||||||||||
A.4.1. | Where is the binary distribution for my platform? | ||||||||||||
The CLISP maintainers do not offer CLISP binary distributions, we believe that software packagers specializing on a particular platform are in a better position to provide quality binaries. Indeed, the section “Get CLISP” on the CLISP's home page points to CLISP packages for all major Linux and *BSD variants. The only exception is Win32 for which there is no centralized packager: usually, after each CLISP release, a CLISP user volunteers to build a Win32 binary package, which we then distribute at http://sourceforge.net/project/showfiles.php?group_id=1355. | |||||||||||||
A.4.2. | But a previous release had a binary distribution for my platform, why does not the current one? | ||||||||||||
It was probably contributed by a user who did not (yet?) contribute a binary distribution for the current release. You can find out who contributed a specific binary distribution by looking at the release notes in the SourceForge Files section. | |||||||||||||
A.4.3. | Why does not CLISP build on my platform? | ||||||||||||
Please see file
| |||||||||||||
A.4.4. |
Why is the | ||||||||||||
See a note on “bi-arch systems” in section 2 of
See these threads which discuss the situation in depth:
| |||||||||||||
A.4.5. | What do these error messages
mean: “ | ||||||||||||
This means that you are trying to read (“invalid
byte”) or write (“character cannot be represented”)
a non-ASCII character from (or to) a character stream which has
ASCII This may also be caused by filesystem access.
If you have files with names incompatible with your Note that this error may be signaled by the “Print”
part of the read-eval-print loop and not by the function you call.
E.g., if file ( If instead you type ( CLISP will just print | |||||||||||||
A.4.6. | What does
this message mean: “ | ||||||||||||
CLISP uses GNU readline for command line editing and completion. You get this “Display all 1259 possibilities” message (and sometimes many screens of symbols) when you hit TAB too many times in an inappropriate place. You can turn this feature off if you are using Emacs. It is a good idea not to use TABs in your code. | |||||||||||||
A.4.7. | Why does not command line editing work? | ||||||||||||
See Section 21.2.1, “Command line editing with GNU readline”. | |||||||||||||
A.4.8. | How do I avoid stack overflow? | ||||||||||||
CLISP has two stacks, the “program stack” and the “lisp stack”, and both may occasionally overflow. | |||||||||||||
Generic |
| ||||||||||||
Specific |
| ||||||||||||
A.4.9. | Why does my program return different values on each invocation? | ||||||||||||
The following code modifies itself: (let ((var '(a b c))) (nconc var '(1 2 3)))
and will not work as one would naively expect.
(on the first invocation, it will return
(a b c 1 2 3),
the second invocation will produce a circular
list, the third will hang trying to Instead you must do (let ((var (copy-list '(a b c)))) (nconc var (copy-list '(1 2 3))))
See Lisp Programming Style for more useful information. | |||||||||||||
A.4.10. | Why don't floating point arithmetic return what I want?
(- 1.1 0.9)
⇒ | ||||||||||||
inexact | Floating point arithmetic is inherently inexact, so this not a bug, at least not a bug in CLISP. You may argue that this is a bug in IEEE 754, but, before you do, please make sure that you do know What Every Computer Scientist Should Know About Floating-Point Arithmetic (or are at least familiar with the light version thereof). See also clisp-list
( | ||||||||||||
exact | If you want exact
calculations, use
(- 11/10 9/10)
⇒
| ||||||||||||
A.4.11. | Why does
always print the same number? | ||||||||||||
Reproducibility is important. See Section 12.2.7, “Random-State Operations ”. | |||||||||||||
A.4.12. | Why is an extra line break inserted by the pretty printer? | ||||||||||||
See the section called “Variable For example, here you are pretty-printing two objects: a one-liner #\Q and a two-liner CR+LF, and a line break is inserted between them so that they are printed on separate lines: (defparameter crlf (coerce '(#\Return #\Linefeed) 'string)) ⇒ When you want CR+LF-terminated lines, use | |||||||||||||
A.4.13. | How do I disable this annoying warning? | ||||||||||||
CLISP often issues If everything else fails, read the manual. | |||||||||||||
A.4.14. | Why does (defun adder (val) (lambda (x) (+ x val))) ⇒ | ||||||||||||
Explanation | The above code does not conform to [ANSI CL standard], therefore CLISP can produce arbitrary results. See Section 3.2.2.3, “Semantic Constraints ”. | ||||||||||||
Remedy | Always follow the naming convention for global special variables
defined by | ||||||||||||
More |
| ||||||||||||
A.4.15. | The error message is not helpful! | ||||||||||||
Sometimes an error message contains a compound object
whose content you want to examine. Often this object will be available
for *** - READ: input stream #<INPUT STRING-INPUT-STREAM> ends within an object The following restarts are available: ABORT :R1 ABORT | |||||||||||||
A.4.16. | Why is the function | ||||||||||||
When confronted with unexpected behavior, try looking in the CLISP impnotes. E.g., CLISP Alternatively, since the implementation notes are organized in
parallel to the [ANSI CL standard], and |
These notes document CLISP version 2.49 | Last modified: 2010-07-07 |