Языки программирования - концепции и принципы

Обычные цели языка Prolog могут


customer(1, "Jonathan").                                    /* клиент(Идент_клиента, Имя) */

customer(2, "Marilyn"),

customer^, "Robert").

salesperson 101, "Sharon").                               /* продавец(Идент_продавца, Имя) */

salesperson 102, "Betty").

salesperson 103, "Martin").

order(103, 3, "Jaguar").                                     /*заказ(Идент_продавца,

order(101, 1, "Volvo").                                               Идент_клиента, товар)*/

order(102, 2, "Volvo").

order(103, 1, "Buick").

Обычные цели языка Prolog могут интерпретироваться как запросы к базе данных. Например:

?-   salesperson(SalesJD, "Sharon"),                /* ID Шэрон */

order(SalesJD, CustJD, "Volvo"),                   /* Заказ Volvo */

customer(CustJD, Name).                                /* Клиент заказа */

означает следующее: «Кому Шэрон продала Volvo?». Если запрос успешный, переменная Name получит значение имени одного из клиентов. В противном случае мы можем заключить, что Шэрон никому Volvo не продавала.

    Сложные запросы базы данных становятся простыми целями в языке Prolog. Например: «Есть ли клиент, которому продавали автомобиль и Шэ­рон, и Мартин?»:

?-     salesperson(ID1,"Sharon"),                /* ID Шэрон */

        salesperson(ID2, "Martin"),              /* ID Мартина */

        order(ID1, CustJD, _),                      /* ID клиента Шэрон */

       order(ID2, CustJD, _).                       /* ID клиента Мартина */

Поскольку переменная CustJD является общей для двух элементарных фор­мул, цель может быть истинной только, когда один и тот же клиент делал за­каз у каждого из продавцов.

    Является ли язык Prolog реальной альтернативой специализированному программному обеспечению баз данных? Реализация списков фактов вполне эффективна и может легко отвечать на запросы для таблиц из тысяч записей.

Содержание  Назад  Вперед