Re: Powerloom API
Thomas Russ <[email protected]> Wed, 31 Oct 2007 09:49:32 -0700
| Newsgroups | gmane.comp.ai.powerloom |
|---|---|
| Message-ID | <[email protected]> |
On Oct 31, 2007, at 3:04 AM, Andrea Poli wrote:
> Thomas Russ ha scritto:
>> On Oct 30, 2007, at 7:14 AM, Magnus Malm wrote:
>>
>>
>>> Hello
>>>
>>> I am looking into the API of PowerLoom, and I was just wondering if
>>> there's some examples of how to use it? Especially the s-*
>>> functions. How to create/delete concepts, objects, relations, etc.
>>> If there's no such examples available, perhaps someone could post
>>> one or two quick and simple ones to the mailinglist?
>>>
>>
>> You didn't specify which language you were planning to use.
>>
>>
> I need to use C++ for my thesis on home automation
>> There is an example file for Java, which is on the documentation page
>> of our web site:
>>
>> <http://www.isi.edu/isd/LOOM/PowerLoom/documentation/
>> PowerLoomExample.java>
>>
>>
>>
> The manual hasn't any documentation on C++ API. There are some
> examples?
We don't really have any specific C++ examples, since we haven't
programmed directly using that language. When we use the C++ version
of PowerLoom, we have always done that through the Stella programming
language and had the resulting C++ code generated for us.
What you can do, however, is use the command "cpptrans" in the
PowerLoom listener to translate and print Stella constructs in their C
++ form. That will allow you to see how constructs from the
reference manual will look. There are also analogous commands for
java "jptrans" and lisp "ptrans". The name is short for "print
translation".
For example:
PL-USER |= (cpptrans (pli/get-concept "RELATION" null null))
pli::getConcept("RELATION", NULL, NULL)
PL-USER |= (cpptrans (pli/s-retrieve "all (concept ?y" null null))
pli::sRetrieve("all (concept ?y", NULL, NULL)
The main difference between the C++ examples and the Java code is
that C++ uses namespaces corresponding to the PowerLoom modules, in
contrast to Java and Lisp which uses their native packages. For
lisp, the pli functions are in the PLI package. All others are in
the STELLA package.
The other difference in C++ compared to Java, is that objects are
referred to using pointers.
PL-USER |= (cpptrans (let ((c (pli/get-concept "CONCEPT" null null))
(it (pli/get-concept-instances c null
null)))
(print it)))
{ LogicObject* c = pli::getConcept("CONCEPT", NULL, NULL);
pli::PlIterator* it = pli::getConceptInstances(c, NULL, NULL);
std::cout << it;
}
The naming convention transformations for C++ are the same as Java,
except that the "*" character is translated to "o" instead of "$".