Программирование на языке ПРОЛОГ для искуственного интеллекта




Структуры - часть 3


       точка( XI, Y1)  и   точка ( X, Y, Z)

Если одно и то же имя появляется в программе в двух различных смыслах, как в вышеупомянутом примере с точкой, то пролог-система будет различать их по числу аргументов и интерпретировать это имя как два функтора: один - двухаргументный; второй - трех. Это возможно потому, что каждый функтор определяется двумя параметрами:

(1)    именем, синтаксис которого совпадает с синтаксисом атомов;

(2)    арностью - т. е. числом аргументов.

Как уже объяснялось, все структурные объекты в Прологе - это деревья, представленные в программе термами. Рассмотрим еще два примера, чтобы показать, насколько удобно сложные объекты данных представляются с помощью прологовских термов. На рис. 2.5 показана древовидная структура, соответствующая арифметическому выражению

       (а + в)*(с - 5)

В соответствии с введенным к настоящему моменту синтаксисом, такое выражение, используя символы *,  +  и  -  в качестве функторов, можно записать следующим образом:

       *( +( а, в), -( с, 5) )

fig2_5.gif (728 bytes)

Рис. 2. 5.  Древовидная структура, соответствующая арифметическому
выражению (а + w)*(s - 5).

Это, конечно, совершенно правильный прологовский терм, однако это не та форма, которую нам хотелось бы иметь, при записи арифметических выражений. Хотелось бы применять обычную инфиксную запись, принятую в математике. На самом деле Пролог допускает использование инфиксной нотации, при которой символы *,  +   и  -  записываются как инфиксные операторы. Детали того, как программист может определять свои собственные операторы, мы приведем в гл. 3.

В качестве последнего примера рассмотрим некоторые простые электрические цепи, изображенные на рис. 2.6. В правой части рисунка помещены древовидные представления этих цепей. Атомы r1, r2, r3 и r4 - имена резисторов. Функторы пар и посл обозначают соответственно параллельное и последовательное соединение резисторов.Вот соответствующие прологовские термы:

       посл( r1, r2)
        пар( r1, r2)
        паp( rl, пap( r2, r3) )
        пар( r1, посл( пар( r2, r3), r4) )

 

fig2_6.gif (3887 bytes)

Рис. 2. 6.  Некоторые простые электрические цепи и их представление: (а) последовательное соединение резисторов rl и r2; (b) параллельное соединение двух резисторов; (с) параллельное соединение трех резисторов; (d) параллельное соединение r1 и еще одной цепи.




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