Next: References
Up: A Note on Declarative
Previous: Declarative Programming Languages
While GCLA is an interesting first approximisation of definitional programming it is still to much of an extension to Prolog. Not only does it share first-order terms, logical variables, back-tracking and much of its syntax with Prolog, but it is also compiled into a Prolog program. The first GCLA programs were also clearly Prolog influenced. With new techniques being developed [41,42,9,10] it becomes clear that there is a need to refine the tools into a purely definitional language. Also in the Medview project [16] it has become clear that GCLA is not sufficient as modelling tool.
Some problems (in no particular order) discovered are:
- Programs run to slowly.
- GCLA lacks means to communicate with the surrounding world.
- In a interactive system like Medview a computational model that takes a query and gives an answer does not seem to fit. Parts of the answer might be needed before the answer has been fully computed and it is also possible that it is the computation itself that is interesting.
- Definitions in programs are built from first order terms. When we try to give a cognitive model of something like the knowledge of an expert in oral medicine this is not enough. We need to be able to define notions in more general terms, definitions need to be built from arbitrary objects.
- To give an appropriate model it is sometimes necessary to have several object definitions. The most typical example is the programĀseparation techniques described in [10].
- The definiens operation provided in GCLA is too general and thus too complex in lots of simple applications. We have yet to find the application using the full power of the current definiens operation.
- GCLA has no module system making it very hard to develop large applications. This has been discussed in [11].
The goal of a new definitional programming system would be to create a system good enough for use in real applications. Currently in Medview for instance the conceptual models are expressed in a definitional theory while the implementation is simply a series a C programs. If we could design and implement a useful system the theoretical model and the running application could both be expressed within the same theory.
This should simplify the development process and increase the quality of the resulting application since it would be easier to know that it implements the intended model. Some ideas and demands for such a system are:
- Instead of the syntactically oriented approach in GCLA and in [15,26] a more abstract description of the notion of a definition should be used. A definition D is simply given by the following data:
- Two sets Dom (the domain of the definition) and Com (the collection of defining conditions) where we assume that Dom is included in Com.
- Two operations
and
. Def gives the definiens of a defined object while Fed gives the conditions in
that a given defining condition depends on.
- Too gain efficiency we must have a number of different definiens operations making it possible to use the right level of generality. Note that this will be enforced automatically by the abstract notion of a definition, since the definition is defined in terms of its definiens operation.
- If we use an abstract enough notion of a definition we might be able to achieve syntax free programming. That is, the syntax will not be essential to the computational model. We will
compute with definitional objects not syntactical objects.
- The strict separation of declarative description and procedural part used in GCLA will be kept. We
believe that it is essential not to clutter the declarative part with control information. We also believe that it is essential that the control part has a declarative meaning.
- To give wide portability programs should be compiled into C.
- It must be possible to have full control of search.
- The programming model should from the start consider interaction with the outside world.
compile to C for portability
- On top of the abstract definitional model different programming methodologies can be implemented as library modules. Of course, the user of such modules will program using some syntactical representation.
Next: References
Up: A Note on Declarative
Previous: Declarative Programming Languages
Olof Torgersson
Tue Mar 19 11:03:41 MET 1996