-
Notifications
You must be signed in to change notification settings - Fork 2
metaL
metaL
is a FORTH-like frame structure definition and command language (DDL) was derived from classical FORTH to avoid a lot of low-level implementation problems like direct memory addressing, interfacing with external libraries, etc.
The universe of the metaL
system is a large extendable network of interconnected objects, which can be used to modify itself in a programmatic manner. We need to manipulate such a frame network, and the most simple and flexible way to do it is a Command Line Interface. In result, we need to have very simple command language, and FORTH is unbeatable in such a role.
FORTH-like command/scripting language for Frame-based metaprogramming
metaL inherits two structures from FORTH
- Data Stack
- global vocabulary in Dict
For commands interpreter it uses PLY library.
The goal of metaL
is providing simple to implement and use command interface between a user and Frame-powered Knowledge Database. Using metaL
you are not writing programs: you design frame graph structure using data stack and very simple postfix syntax. You also can use global vocabulary to hold frame constructs which can be addressed as slot names of a vocabulary frame.
Minsky’s frame model suggests the presence of executable semantics: there are daemons and executable slots at the level of object/graph database engine.
Here we have some drawbacks in storage implementation: back storage engines available for most (implementation) programming languages can't hold executable elements.
I tend to totally avoid any scripting languages use. If you look a lot of publications and manuals on expert system design, there are a lot of cryptic Lisp/Prolog code defines knowledge databases and rules. But it is not required to have scripting, as data stored in the database itself has a power of describing processing procedures and rules. It looks like MPS: The Domain-Specific Language Creator by JetBrains where data defines not only structures, but its (self)transformations.
From the other side, it is a very common case to have human-readable ASCII formats for batching data loading and transformation, so I leave very primitive FORTH-like command language for these tasks.
To define new commands in metaL
you can
- use Seqence as an anonymous executable frame, and
- assign it to name in vocabulary.
metaL
has no colon definitions, its equivalent is Seqence which runs in a global context.