- Философия, эзотерика:
- Религии:
- Познавательное
(обо всём)
/* 11.11.2012 Среда - EZY Prolog Программа «Деление списка». */ domains /* список чисел */ list = integer * /* компаратор */ middle = integer predicates split(middle,list,list,list) clauses /* Очередной элемент извлекается из списка при помощи метода разделения списка на голову и хвост, а потом сравнивается с компаратором Middle. Метод деления списка на голову и хвост используется в данном правиле как для разделения исходного списка, так и для формирования выходных списков. Если значение этого элемента меньше или равно значению компаратора, то элемент помещается в список L1 и формируется новый список, состоящий из хвоста предыдущего списка. */ split(Middle,[Head|Tail],[Head|L1],L2) :- Head <= Middle, write("Head1 = ", Head, ", ", "Tail1 = ", Tail), nl, split(Middle,Tail,L1,L2). /* Если значение этого элемента больше значения компаратора, то элемент помещается в список L2 и формируется новый список, состоящий из хвоста предыдущего списка. */ split(Middle,[Head|Tail],L1,[Head|L2]) :- Head > Middle, write("Head2 = ", Head, ", ", "Tail2 = ", Tail), nl, split(Middle,Tail,L1,L2). /* Вывести содержимое списков: исходный список - уже пустой, L1 - числа меньше или равно Middle, L2 - числа больше Middle) */ split(_,[],[],[]). goal /* Внешние цели - split(40,[0,30,50,20,25,65,95],L1,L2).*/
Результат:
Head1 = 0, Tail1 = [65,30,50,20,25,95]
Head2 = 65, Tail2 = [30,50,20,25,95]
Head1 = 30, Tail1 = [50,20,25,95]
Head2 = 50, Tail2 = [20,25,95]
Head1 = 20, Tail1 = [25,95]
Head1 = 25, Tail1 = [95]
Head2 = 95, Tail2 = []
L1=0,30,20,25
L2=50,65,95
!!Рекомендуем: Что должен знать современный человек? ⇒ Семейная Энциклопедия Здоровья ⇒ Самоанализ. Работа над собой ⇒ Оглавление ⇒ Главная сайта
Обсуждение