Модульные проекты применяются для упрощения программирования.
Рассмотрим пример программы, которая анализирует список персон. Для персон задаются имя и возраст. Сначала в консоль выводится список имен, затем список возрастов и в конце средний возраст персон.

Для удобства было бы неплохо отделить объявление фактов, предикатов и т.д., которые касаются персон в другой модуль.
Для того чтобы создать модуль, следует выделить корень дерева проекта и выбрать команду (всплывающего) меню New In New Package. В открывшемся диалоговом окне Create Project Item необходимо выбрать в левом поле раздел Class, убрать флажок из поля Create Interface, ввести в поле Name имя модуля, в нашем случае «person», и нажать на кнопку Create.

После чего появится новая папка в нашем проекте «person», в которой мы будем изменять файлы person.pro и person.cl.
В файле person.cl описан класс, через который мы будем обращаться в главном файле проекта main.pro, поэтому добавим в него объявление предикатов:

class person

open core

domains
	name = string.
	age = integer.
	age_list = integer_list.

predicates
	person : (name, age) multi (o,o). % Студенты
	sumlist : (age_list, age, integer) procedure(i,o,o). % Список их данных

end class person
Теперь перейдем к определению этих предикатов в файле person.pro:
implement person

open core

clauses
	% Пустой список, сумма возрастов Sum=0 и число студентов N=0
	sumlist([],0,0).
	sumlist([H|T], Sum, N):-
	sumlist(T, S1,N1), % Вызов для очередного факта
	Sum=H+S1, % Копим сумму
	N=1+N1. % увеличиваем N на 1
	% Список фактов
	person("Иванов", 42).
	person("Петров", 36).
	person("Сидоров", 36).

end implement person 
И завершающим этапом будет добавление функционала в главный файл проекта main.pro:
implement main

open core, console, person

clauses
	run():-
		init(),
		write("Список студентов: "),nl,
		L1 = [ Name ||person(Name, _)], % Получить список
		write(L1),nl,nl,
		write("Их возраст: "),nl,
		L2 = [ Age || person(_, Age)], % Получить список возрастов
		write(L2),nl,nl,
		% Получить из списка L2 сумму возрастов Sum и число студентов N
		sumlist(L2, Sum, N),
		Ave = Sum/N, % Средний возраст студентов
		write("Средний возраст = ", Ave),nl,nl,
		write("Нажмите Enter"),
		_= readLine().

end implement main

goal
	mainExe::run(main::run).
Как видно, для обращения к предикатам класса person достаточно добавить его имя в строку open core, console.

                                                                       << предыдущий | следующий >>


2016-06-07 • Просмотров [ 185 ]