Notes on CLIPS2C
----------------

COOL
----

Implement bare necessity to start with, i.e. classes/instances
only, no defmessagehandler.

How to represent classes/instances... should use C++ classes/instances,
obviously. Might need to impose restriction that all slots are
typed (or try to resolve type as usual.)

-- allocation. Instances need to be dynamically new'ed. A new ClipsType for
an instance pointer needs to be defined, for
use when manipulating lists at run-time. InstanceValue() should be
defined, coercing to the appropriate type.

-- identifiers. How to deal with identifiers? In CLIPS, there's a pool of
instances, and named instances can come and go. Could have
a wxList (or ClipsExpr list) of all CLIPS instances with
identifiers (or, better, a hash table).

-- accessors. Generate get/set accessors.

-- storage. Loading/saving instances is a challenge.
Would be nice to be able to load/save instances from/to
real .clp files; one problem with that is clashes with
PrologExpr library. Could rename YACC/LEX identifiers
using #defines. Otherwise, could use PROLOGIO library
(would also take up less space in executable).

How to actually do this. Could generate
::WriteAttributes/::ReadAttributes for each class, and
also a function to test for a type, new an appropriate type,
then call the appropriate ::ReadAttributes. Save
implementing this for a rainy day...

CLIPS types
-----------

SYMBOL, STRING, LEXEME, INTEGER, FLOAT, NUMBER,
INSTANCE-NAME, INSTANCE-ADDRESS, INSTANCE,
EXTERNAL-ADDRESS, FACT-ADDRESS.


Functions deliberately not implemented (fully)
----------------------------------------------

subsetp         // Unlikely to be used often
insert, replace // Fixed number of arguments
progn, progn$   // Cannot return a value.
str-index
build
eval
get-function-restrictions
loop-for-count  // Can only use the variable form
switch          // Cannot return a value

To do
-----

Some maths functions
