InteLib logo InteLib F.A.Q.

What is InteLib?

InteLib is a library of C++ classes which lets you do Lisp programming (or Scheme programming, if you prefer so) within your C++ program even without any additional preprocessing, without all those calling conventions etc. You can write a C++ code (that is, a code which is accepted by your C++ compiler) thinking in a "Lisp mode" and the code you write will look much like Lisp code altough it will be pure C++.

Why it is named so?

The name InteLib stands for Intelligence Library. It is because the library was primarily intended to make some use out of so-called artificial intelligence programming languages such as Lisp, Prolog etc.

Why do I need it?

In almost every serious project there are little annoying subtasks which you could implement in minutes using another programming language, but you've got to waste hours, days or even weeks to implement them within the project's only language (typically C++). Suppose for example you've got an equotion and you need to differentiate it. The task is solved in at maximum two or three hours if you program in Lisp or Scheme. It takes no less than a day if you're using pure C++.

With InteLib, you can do it in C++ just as if you were coding in Lisp. And you actually don't need any Lisp for it. It's all C++.

When do I need it?

InteLib will be useful for you if you work with C++ and you know Lisp. It is primarily intended for people who are able to see that something is better to be implemented in one of the alternative languages than in pure C++. And you only can do such a conclusion if you know what Lisp or Prolog or whatever is and what can it do.

Is it free?

The simple (and incomplete) answer is -- yes, but only if your project obeys certain rules. The library is distributed freely under the terms and conditions of GNU General Public License v.2, and the library part itself (that is, the sexpress/, tools/, genlisp/, lisp/ and scheme/ directories) is also available under GNU Lesser General Public License v.2.1. Please note this does not mean it is in public domain, nor does it mean you can use it in whatever manner you want. Only if you develop free software (as defined by FSF) there's nothing to worry about; if you develop anything else, there are certain (and strict) rules you must obey. See the licensing information for details. If you really wish non-GPL license, read this also.

Can I still write Lisp/Scheme code using the original Lisp syntax (without all these Ls, commas etc)?

Yes, you can. There are translators ILL (stands for InteLib Lisp) and ILS (for InteLib Scheme), that come with the library. They translate a file written in traditional Lisp/Scheme syntax into a C++ module that consists of the header and the implementation file. The translators are useful ONLY in case you need to write a whole module in Lisp or Scheme. There's no use for them if the Lisp-like code is to be mixed up with traditional C++ within the same module.

What about compatibility with existing Lisp dialects?

There are actually two Lisp dialects supported by the library, the InteLib Lisp and the InteLib Scheme. Both are not standard-compliant. It is possible that InteLib Scheme will be r5rs-compliant one day (but not r6rs, and don't expect that from us). This is not guranteed however. As of Common Lisp, that monster is definitely will never be implemented in InteLib. The InteLib Lisp dialect looks more like Common Lisp than like Scheme, but I'd say it is farer from Common Lisp than even from Scheme, if we take into account the number of missing features.

By the way, there are some extensions in both dialects, such as SETF! syntax in InteLib Scheme, and CALL/CC in InteLib Lisp.

See this text for additional information on InteLib Lisp.

Why didn't you implement Common Lisp or R5RS (R6RS) Scheme? Standards are good!

First of all, it wasn't the primary goal of the project. I realize it could be useful to be compatible with one of the standard dialects, but there are more important things.

Furthermore, Common Lisp is way too complicated to clone, so there was no chance for InteLib Lisp to grow to it, and not only because it would took too much effort, but also because there are lots of things in Common Lisp which are unwanted in InteLib (such as huge number of symbol objects used as labels, which Intelib would have to implement as global variables).

As about Scheme, it only made some sence to speak about it when the InteLib 0.5.83 got released, as it was the first time InteLib contained any Scheme. The sad thing is that it was perfectly realized that R5RS is simple enough to try to comply it with InteLib Scheme, but these days the ratification process of R6RS was already started. It is unlikely we ever want to be R6RS compliant. I'd rather write a paper titled, say, Standardisation activity as a kind of terrorism.

Last updated April 07, 2008