ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »
