ВУЗ:
Составители:
Рубрика:
29
goal
список1(Список1),
список2(Список2),!, % А вдруг БД пуста?!
объединить_списки(Список1,Список2,Список3);!.
clauses
объединить_списки([],L,L).
объединить_списки([H|L1],L2,[H|L3]):-
объединить_списки(L1,L2,L3).
Что будет происходить? Поскольку вначале первый список
не пуст, Пролог будет пытаться удовлетворить второе правило,
очищая первый список. Элементы первого списка пересылаются в
стек в оперативной памяти. Когда первый список окажется
пус-
тым, становится возможным третьему списку присвоить второй
список, и первое правило окажется истинным: объединить_спис-
ки([],[8,9],[8,9]).
Пролог берется за второе правило, сворачивая рекурсию.
Начиная с вершины стека, он присваивает элементы "головам"
первого и третьего списков. При этом на каждом шаге левая часть
второго правила истинна, происходит рекурсивный вызов и
так до
тех пор, пока стек не опустеет.
• Сортировка списков
goal
sortL([5,4,7,6,11,9],LS)
clauses
sortL([],[]).
sortL([X|T],Sorted_list):-
sortL(T,Sorted_tail),
insert(X,Sorted_tail,Sorted_list).
insert(X,[Y|Sorted_list],[Y|Sorted_list1]):-
ask_order(X,Y),!,
insert(X,Sorted_list,Sorted_list1).
insert(X,Sorted_list,[X|Sorted_list]).
ask_order(X,Y):-X>Y.
30
3.6. Ввод и вывод
PDC Visual prolog обладает гибкой системой ввода-вывода и
манипулирования файлами.
3.6.1. Файловая система
Доступ к файлу может осуществляться в двух "модах" – би-
нарной и текстовой. Для определения вида доступа используется
специальный предикат filemode(SymbolicFileName,Mode).
Параметр Mode принимает одно из двух значений: 0 –
Binary Mode, 1 – Text Mode. Дальнейшее изложение имеет отно-
шение только к работе с файлами
в текстовой "моде".
Для того, чтобы работать с файлом на внешнем носителе,
его нужно открыть или создать. Открыть файл можно для чтения,
записи, модификации. Прежде чем это сделать, в файле
<имя_проекта>.inc в разделе global domains следует задать симво-
лические имена файлов, разделяя их точкой с запятой. (В том мес-
те, где
написано %To be edited.). Например, уже написано:
global domains
DB_SELECTOR = browselist_db % For treebrowser tool
FILE = fileselector1; fileselector2 % To be edited
Вы должны добавить Ваши имена:
global domains
DB_SELECTOR = browselist_db % For treebrowser tool
FILE = fileselector1; fileselector2; filein; filein2; fileout % To
be edited
Открыть можно практически неограниченное количество
файлов, столько, сколько позволяют установки операционной сис-
темы (но стоит ли это делать?).
Для перехода от одного открытого файла к другому (пере-
направление потоков ввода-вывода) служат предикаты readdevice
и writedevice.
Например:
....................
openread(filein,"text.txt")
openread(filein2,"text2.txt")
openwrite(fileout,"forwrite.txt")
goal 3.6. Ввод и вывод
список1(Список1),
PDC Visual prolog обладает гибкой системой ввода-вывода и
список2(Список2),!, % А вдруг БД пуста?!
манипулирования файлами.
объединить_списки(Список1,Список2,Список3);!.
clauses
3.6.1. Файловая система
объединить_списки([],L,L).
объединить_списки([H|L1],L2,[H|L3]):- Доступ к файлу может осуществляться в двух "модах" – би-
объединить_списки(L1,L2,L3). нарной и текстовой. Для определения вида доступа используется
специальный предикат filemode(SymbolicFileName,Mode).
Что будет происходить? Поскольку вначале первый список Параметр Mode принимает одно из двух значений: 0 –
не пуст, Пролог будет пытаться удовлетворить второе правило, Binary Mode, 1 – Text Mode. Дальнейшее изложение имеет отно-
очищая первый список. Элементы первого списка пересылаются в шение только к работе с файлами в текстовой "моде".
стек в оперативной памяти. Когда первый список окажется пус- Для того, чтобы работать с файлом на внешнем носителе,
тым, становится возможным третьему списку присвоить второй его нужно открыть или создать. Открыть файл можно для чтения,
список, и первое правило окажется истинным: объединить_спис- записи, модификации. Прежде чем это сделать, в файле
ки([],[8,9],[8,9]). <имя_проекта>.inc в разделе global domains следует задать симво-
Пролог берется за второе правило, сворачивая рекурсию. лические имена файлов, разделяя их точкой с запятой. (В том мес-
Начиная с вершины стека, он присваивает элементы "головам" те, где написано %To be edited.). Например, уже написано:
первого и третьего списков. При этом на каждом шаге левая часть global domains
второго правила истинна, происходит рекурсивный вызов и так до DB_SELECTOR = browselist_db % For treebrowser tool
тех пор, пока стек не опустеет. FILE = fileselector1; fileselector2 % To be edited
Вы должны добавить Ваши имена:
• Сортировка списков global domains
goal DB_SELECTOR = browselist_db % For treebrowser tool
sortL([5,4,7,6,11,9],LS) FILE = fileselector1; fileselector2; filein; filein2; fileout % To
clauses be edited
sortL([],[]). Открыть можно практически неограниченное количество
sortL([X|T],Sorted_list):- файлов, столько, сколько позволяют установки операционной сис-
sortL(T,Sorted_tail), темы (но стоит ли это делать?).
insert(X,Sorted_tail,Sorted_list). Для перехода от одного открытого файла к другому (пере-
insert(X,[Y|Sorted_list],[Y|Sorted_list1]):- направление потоков ввода-вывода) служат предикаты readdevice
ask_order(X,Y),!, и writedevice.
insert(X,Sorted_list,Sorted_list1). Например:
insert(X,Sorted_list,[X|Sorted_list]). ....................
ask_order(X,Y):-X>Y. openread(filein,"text.txt")
openread(filein2,"text2.txt")
openwrite(fileout,"forwrite.txt")
29 30
Страницы
- « первая
- ‹ предыдущая
- …
- 13
- 14
- 15
- 16
- 17
- …
- следующая ›
- последняя »
