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



         

Создание и декомпозиция атомов


Часто желательно информацию, считанную как последовательность символов, иметь в программе в виде атома. Для этой цели существует встроенный предикат name. Он устанавливает взаимосвязь между атомами и их кодировкой в ASCII. Таким образом,

        name( A, L)

истинно, если L - список кодов ASCII, кодирующих атом. Например,

        name( zx232, [122, 120, 50, 51, 50] )

истинно. Существуют два типичных способа использования name:

(1)        дан атом, разбить его на отдельные символы;

(2)        дан список символов, объединить их в один атом.

Примером первого случая применения предиката является программа, которая имеет дело с заказами такси и водителями. Все это представлено в программе атомами

        заказ1, заказ2, водитель1, водитель2, такси1, таксилюкс

Предикат

        такси( X)

проверяет, относится ли атом Х к тем атомам, которые представляют такси:

        такси( Х) :-

              name( X, Хспис),

              nаmе( такси, Тспис),

              конк( Тспис, _, Хспис).

        конк( [ ], L, L).

        конк( [А | L1], L2, [А | L3] ) :-

              конк( L1, L2, L3).

Предикаты заказ и водитель

можно определить аналогично.

Наш следующий пример иллюстрирует применение объединения отдельных символов в один атом. Мы определим предикат

        читпредложение( Списслов)

который считает предложение с произвольной формой на естественном языке и конкретизирует Списслов




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