| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> comp.databases.theory -> Re: Storing data and code in a Db with LISP-like interface
>> Food Judge Example C using dbd (db for dummies) follows...
>
> Alvin: ...I will not have the time to provide you with detailed [LISP/]Prolog equivalents. From what I've seen both can easily do the above...
:) OK, I'll just raise my concerns directly rather then verifying them via Example C. Below are items that I am concerned will limit Prolog's ability to represent things in as general/flexible/systematic a manner as dbd for AI-type apps:
like (john, mary).
hate (john, bob).
opposite (like, hate).
This limitation is very similar to that in RM where new data requirements cause a wave of changes in schema, data, scripts, code, etc. Consider what changes take place if the third fact is not known/added until after the first two are known/stored/coded against.
2) Inability to normalize every thing that is represented. For example, the names of things. In Prolog, an atom and it's name are basically inseperable. Thus:
2a) Multiple names for a thing will not be represented systematically.
2b) A thing with no name will have to be given a name anyway such as no_name. This is similar to the NULL problem in RM. Now the the andriod will think a thing's name is actually no_name unless additional rules are added. If handled as such, what if droid actually encounters something named no_name? And how to handle additional unnamed things? no_name2, no_name3, ...?
2c) Two atoms can't have the same name so the atoms for cat and person named mary might be mary_cat and mary_person and this leads to redundant data as shown below. I won't explain the pitfalls of redundancy as volumes have been written on it already with respect to data mgmt.
cat (mary_cat).
person (mary_person).
2d) It does not appear to me (or actually I didn't get to verify this via the example), that the name of an atom is not stored in Prolog's fundamental data representation methodology.
In comparsion when dbd represents a person named john, consider what it actually does:
Thus when one sees the "john" in dbd script, it is translated to approximatley the following query:
(first (select (first (select (select 'j' 'o' 'h' 'n') symbolizes *)) nameOf *)) Received on Sat Apr 29 2006 - 16:28:54 CDT
![]() |
![]() |