TURBO PROLOG. Терёхин В.В. - 108 стр.

UptoLike

Составители: 

108
В результате применения правила к списку [30,50,20,25, 65,95] значе-
ниями списков L1 и L2 станут соответственно [30, 20,25] и [50,65,95].
Само правило для разделения списка записывается в Турбо-Прологе
следующим образом:
split(Middle,[Head|Tail],[Head|L1],L2) :-
Head <= Middle,
split(Middle,Tail,L1,L2).
split(Middle,[Head|Tail],L1,[Head|L2]) :-
split(Middle,Tail,L1,L2),
Head > Middle.
split(_,[],[],[]).
Отметим, что метод деления списка на голову и хвост используется в
данном правиле как для разделения исходного списка,
так и для формиро-
вания выходных списков.
Приведенное правило годится для любых допустимых в Турбо-Прологе
типов данных. Если список состоит из целых чисел, то тогда нужно элементы
списка и компаратор описать как целые. Если же Вы имеете дело со спи-
ском символических имен, то элементы списка и компаратор должны
отно-
ситься к типу symbol.
Программа "Деление списка" (листинг 5.4) включает в себя только что
приведенное правило. Попробуйте ввести такое целевое утверждение:
split(40,[30,50,20,25,65,95],L1,L2).
____________________________________________________________
Листинг 5.4
/* Программа: Деление списка */
/* Назначение: Разделение списка на два. */
domains
middle = integer
list = integer *
predicates
split(middle,list,list,list)
clauses
split(Middle,[Head|Tail],[Head|L1],L2) :-
Head <= Middle,
split(Middle,Tail,L1,L2).
split(Middle,[Head|Tail],L1,[Head|L2]) :-
split(Middle,Tail,L1,L2),
Head > Middle.
split(_,[],[],[]).
/***** конец программы *****/
_____________________________________________________________
      В результате применения правила к списку [30,50,20,25, 65,95] значе-
ниями списков L1 и L2 станут соответственно [30, 20,25] и [50,65,95].
      Само правило для разделения списка записывается в Турбо-Прологе
следующим образом:
      split(Middle,[Head|Tail],[Head|L1],L2) :-
                                            Head <= Middle,
                                            split(Middle,Tail,L1,L2).
      split(Middle,[Head|Tail],L1,[Head|L2]) :-
                                            split(Middle,Tail,L1,L2),
                                            Head > Middle.
      split(_,[],[],[]).
      Отметим, что метод деления списка на голову и хвост используется в
данном правиле как для разделения исходного списка, так и для формиро-
вания выходных списков.
      Приведенное правило годится для любых допустимых в Турбо-Прологе
типов данных. Если список состоит из целых чисел, то тогда нужно элементы
списка и компаратор описать как целые. Если же Вы имеете дело со спи-
ском символических имен, то элементы списка и компаратор должны отно-
ситься к типу symbol.
      Программа "Деление списка" (листинг 5.4) включает в себя только что
приведенное правило. Попробуйте ввести такое целевое утверждение:
             split(40,[30,50,20,25,65,95],L1,L2).
____________________________________________________________
                          Листинг 5.4
/* Программа: Деление списка                                  */
/* Назначение: Разделение списка на два.                */

domains
             middle = integer
             list = integer *

predicates
             split(middle,list,list,list)

clauses
          split(Middle,[Head|Tail],[Head|L1],L2) :-
                             Head <= Middle,
                             split(Middle,Tail,L1,L2).
          split(Middle,[Head|Tail],L1,[Head|L2]) :-
                             split(Middle,Tail,L1,L2),
                             Head > Middle.
          split(_,[],[],[]).
/*****       конец программы             *****/
_____________________________________________________________



                                                                       108