ВУЗ:
Составители:
Рубрика:
23
save(DosFileName,InternalDatabaseName)
(string,DatabaseName) – (i,i)
Встроенный предикат consult загружает БД, сохраненную
предикатом save, из файла в память.
consult(DosFileName) (string) – (i)
consult(DosFileName,InternalDatabaseName)
(string,InternalDatabaseName) – (i,i)
Примеры:
save("stringDB.dba",ab_strings)
consult("stringDB.dba",ab_strings)
Только одна БД в программе может быть неименованной.
Все остальные должны иметь имя.
Вы можете сформировать факты БД в программе, написан-
ной на любом другом языке, и записать их в файл или сформиро-
вать "вручную" при помощи текстового редактора, затем загрузить
в память в программе на Прологе при помощи consult.
3.4. Обработка
условий и организация циклов в Прологе
Два встроенных предиката, очень полезных для обработки
условий и организации циклов:
1. Предикат fail искусственно порождает неуспех.
2. Предикат cut (или !) предотвращает бэктрекинг:
p:-p1,p2,!,p3,.. – если достигнуты цели p1 и p2, бэктрениг не
осуществляется.
3.4.1. Обработка условия
Пусть a – предикат, который может быть либо успешным,
либо нет. В случае успеха мы хотим
выполнить предикат u, в об-
ратном случае – предикат f.
p:-a,!,u;f.
Можно и так (в случае неуспеха выполняется второе прави-
ло для p):
p:-a,!,u.
p:-f.
24
Пример:
p(A,C,Dplus):-A>=C,!,Dplus=A-C;Dplus=C-A.
Или:
p(A,C,Dplus):-A>=C,!,Dplus=A-C.
p(A,C,Dplus):-Dplus=C-A.
Конечно, наиболее простое решение:
p(A,C,Dplus):-Z:=A-C, Dplus=abs(Z), где abs – встроенная
функция.
Если в нашем примере со строками требуется получить все
номера строк с длиной не более 45, тогда процедура, решающая
эту задачу, будет такой:
get_all_DefStrings:-
input_string(NbS,TS,LS),
LS< = 45,
write(NbS,’,’), fail.
get_all_DefStrings. % или get_all_DefStrings:-!.
3.4.2. Использование предиката типа repeat
Пусть требуется в рамках одного правила предиката pravilo
выполнить некоторое множество заведомо успешных предикатов
,
после чего выполнять некоторое другое множество предикатов, до
тех пор, пока справедливо некоторое условие.
Первую и вторую группы предикатов можно, очевидно, обо-
значить одним предикатом, p1 и p2 соответственно. Пусть
p_control – предикат, проверяющий условие, а предикат repeat (ко-
торый может, очевидно, иметь любое другое имя) записывается в
виде следующих двух правил:
repeat.
repeat:-repeat.
Тогда:
pravilo:-p1,repeat,p2,p_control.
Предикат p1
выполнится один раз, предикат же p2 будет
выполняться до тех пор, пока p_control неуспешен.
save(DosFileName,InternalDatabaseName) Пример: (string,DatabaseName) – (i,i) p(A,C,Dplus):-A>=C,!,Dplus=A-C;Dplus=C-A. Встроенный предикат consult загружает БД, сохраненную Или: предикатом save, из файла в память. p(A,C,Dplus):-A>=C,!,Dplus=A-C. consult(DosFileName) (string) – (i) p(A,C,Dplus):-Dplus=C-A. consult(DosFileName,InternalDatabaseName) (string,InternalDatabaseName) – (i,i) Конечно, наиболее простое решение: p(A,C,Dplus):-Z:=A-C, Dplus=abs(Z), где abs – встроенная Примеры: функция. save("stringDB.dba",ab_strings) consult("stringDB.dba",ab_strings) Если в нашем примере со строками требуется получить все номера строк с длиной не более 45, тогда процедура, решающая Только одна БД в программе может быть неименованной. эту задачу, будет такой: Все остальные должны иметь имя. get_all_DefStrings:- Вы можете сформировать факты БД в программе, написан- input_string(NbS,TS,LS), ной на любом другом языке, и записать их в файл или сформиро- LS< = 45, вать "вручную" при помощи текстового редактора, затем загрузить write(NbS,’,’), fail. в память в программе на Прологе при помощи consult. get_all_DefStrings. % или get_all_DefStrings:-!. 3.4. Обработка условий и организация циклов в Прологе 3.4.2. Использование предиката типа repeat Два встроенных предиката, очень полезных для обработки Пусть требуется в рамках одного правила предиката pravilo условий и организации циклов: выполнить некоторое множество заведомо успешных предикатов, 1. Предикат fail искусственно порождает неуспех. после чего выполнять некоторое другое множество предикатов, до 2. Предикат cut (или !) предотвращает бэктрекинг: тех пор, пока справедливо некоторое условие. p:-p1,p2,!,p3,.. – если достигнуты цели p1 и p2, бэктрениг не Первую и вторую группы предикатов можно, очевидно, обо- осуществляется. значить одним предикатом, p1 и p2 соответственно. Пусть p_control – предикат, проверяющий условие, а предикат repeat (ко- 3.4.1. Обработка условия торый может, очевидно, иметь любое другое имя) записывается в Пусть a – предикат, который может быть либо успешным, виде следующих двух правил: либо нет. В случае успеха мы хотим выполнить предикат u, в об- repeat. ратном случае – предикат f. repeat:-repeat. p:-a,!,u;f. Тогда: Можно и так (в случае неуспеха выполняется второе прави- pravilo:-p1,repeat,p2,p_control. ло для p): p:-a,!,u. Предикат p1 выполнится один раз, предикат же p2 будет p:-f. выполняться до тех пор, пока p_control неуспешен. 23 24
Страницы
- « первая
- ‹ предыдущая
- …
- 10
- 11
- 12
- 13
- 14
- …
- следующая ›
- последняя »