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



         

Создание и декомпозиция термов: =, functor, arg, name - часть 2


                A1 is F*A

        увел( окружность( R), F, окружность( R1) ) :-

                R1 is F*R1

        увел( прямоугольник( А, В), F, прямоугольник( А1, В1)) :-

                A1 is F*A, B1 is F*B.

Такая программа будет работать, однако она будет выглядеть довольно неуклюже при большом количестве различных типов фигур. Мы будем вынуждены заранее предвидеть все возможные типы, которые могут когда-либо встретиться. Придется заготовить по предложению на каждый тип, хотя во всех этих предложениях по существу говорится одно и то же: возьми параметры исходной фигуры, умножь их на коэффициент и создай фигуру того же типа с этими новыми параметрами.

Ниже приводится программа, в которой делается попытка (неудачная) справиться для начала хотя бы со всеми однопараметрическими фигурами при помощи одного предложения:

        увел( Тип( Пар), F, Тип( Пар1) ):-

                Пар1 is F*Пар.

Однако в Прологе подобные конструкции, как правило, запрещены, поскольку функтор должен быть атомом, и, следовательно, переменная Тип

синтаксически не будет воспринята как функтор. Правильный метод - воспользоваться предикатом '=..' . Тогда процедура увел будет иметь обобщенную формулировку, пригодную для фигур любых типов:

        увел( Фиг, F, Фиг1):-

                Фиг =.. [Тип | Параметры],

                умножспис( Параметры, F, Параметры1),

                Фиг1 =.. [Тип | Параметры)].




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