Шаг 48.
Основы логического программирования.
Составные списки

    На этом шаге мы рассмотрим составные списки.

    Список целых может быть объявлен просто:

   integerlist=integer*

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

   [2,3,5.12,["food","goo"],"new"] %  Некорректно в Прологе.

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

    Пример объявления доменов для списка, который может содержать символы, целые, строки или списки:

   domains  %  функторы l,i,c и s
      llist=l(list); i(integer); с(char); s(string) 
      list=llist*
    Список
   [2,9,["food","goo"],"new"] %  Некорректно в Прологе
должен быть представлен как:
   [i(2),i(9),1([s("food"),s("goo")]),s("new")] %  Корректно.

    Ниже приведен пример, показывающий объединение списков и использование объявления доменов в типичном случае работы со списками.

   domains  
      llist=l(list); i(integer); c(char); s(string) 
      list=llist*
   predicates
      append(list,list,list)
   clauses
      append([],L,L).
     append([X |Ll],L2,[X |L3]):-
        append(Ll,L2,L3).
   goal
      append([s(likes),l([s(bill), s(mary)])], [s(bill), s(sue)],Ans),
      write("First list: ", Ans,"\n\n"),
      append( [l( [s("This") ,s("is") ,s("a") ,s("list") ] ) ,s(bee) ],
                   [c('c')],Ans2),
      write("Second list: ", Ans2, '\n', '\n').
    Текст этой программы можно взять здесь.

    Со следующего шага мы начнем рассматривать реализацию арифметических и логических операций.




Предыдущий шаг Содержание Следующий шаг