Скачиваний:
22
Добавлен:
01.05.2014
Размер:
299.01 Кб
Скачать

Глава 5

1. Процедура "читатьпредлож" воспримет предложение, занимающее более одной строчки. Если Вы наберете несколько предложений на одной строчке, то будет воспринято лишь первое из них. Что произойдет с осталь­ными символами этой строчки, будет зависеть от вида буферизации вход­ных данных в Вашей версии Пролога.

2. Форма записи предиката "вводстроки", вырабатывающего список слов по строке входной информации, будет различной в разных версиях Пролога. Ниже приводится простой вариант решения, предназначенный для СиПролога. Недостатком этой программы является то, что она в качестве последнего слова возвращает символ перехода к новой строке.

% вводстроки ( [W | Lw]) :— % считать строку

get0(C),

читатьслово (С, W, C1),

остатокпредл (W, C1, Lw), !.

% предыдущее слово и следующий символ введены;

% считать оставшуюся часть строки.

% + + -

остатокпредл (W, _, [ ]):—

границапредл (W), !. % конец, если предыдущим словом

% была граница предложения.

остатокпредл (W, С, [W1 | Lw]) : -

читатьслово (С, W1, C1),

остатокпредл (W1, C1, Lw).

% взять первый символ, прочитать слово, вернуть следующий

% символ.

% +.- -

читатьслово (С, W, _) :-переводстроки (С),

name(W, [С]). % построить слово по символам, % содержащимся в списке С.

читатьслово (С, W. C1) ;-

пунктуация(С), !,

name(W, [С]), % построить слово по символам,

% содержащимся в списке С.

get0(Cl).

читатьслово (С, W,C1):-

допустимый_символ (С),

!.

get0(C2),

остатокслова (С2, Lc, C1), % ввести последующие

% символы.

name(W, [С | Lc]). % построить слово.

читатьслово (С, W,C1):-

get0(C2). % символ "С" неприемлем, ввести новый

% символ.

читатьслово (С2, W, Cl). % попытаться снова.

% составлять слово из символов до тех пор, пока не

% встретится недопустимый символ

% + -

остатокслова (С, [С | Lc], Cl):- % объединить символы в список

допустимый_символ (С),

!,

get0(C2),

остатокслова (С2, LC, Cl).

остатокслова (С, [ ], С). % конец слова, если символ С

% недопустим

% символы, считающиеся самостоятельными словами:

пунктуация(44). % , пунктуация(59). % ;

пунктуация(58). %:

пунктуация(63). % ?

пунктуация(33). % !

пунктуация(46). % .

переводстроки (10). % символ перевода строки для ОС

% UNIX, VMS и т.д.

% диапазоны кодов допустимых символов:

допустимый _символ(I) - I > 96, К 123. %a—z

допустимый_символ (I) - I > 64, I < 91. % A ~ Z

допустимый_символ (I) - I>47, I < 58. %0—9

%символы, заканчивающие строку:

границапредл (' '). % перевод строки

данную задачу можно было бы решить более просто, если написать вариант процедуры "вводполя/1" (см. разд. 3.9), которая возвращала бы список всех символов строки, и другую процедуру, которая разбивала бы этот список на отдельные слова.

6. Символы ( и ) следует объявить как знаки пунктуации. Если симво­лы : и - объявлены как допустимые, то процедура "читатьпредлож" вы­дает сочетание символов :— как отдельное слово, если только сразу после лото сочетания располагается пробел или символ перевода строки.

8. Довольно трудно добавить команду "суммировать" без серьезной переделки программы. Лучше всего будет связать эту команду с заключи­тельным действием, выполняемым при обработке запроса. Так, команда "отобразить" должна приводить к тому, что заключительным действием будет обращение к процедуре "печатать_тсписок" (это сейчас выполняется но умолчанию). Команда "суммировать" должна приводить к тому, что заключительным действием будет вызов новой программы, названной, к примеру, "суммировать_тсписок". Эта программа должна суммировать все значения, передаваемые ей через аргумент {{Printlist}), и печатать ито­говую сумму,

Соседние файлы в папке Гл.6,7,Прилож.,Допол