Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 106
- 107
- 108
- 109
- 110
- …
- следующая ›
- последняя »