This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
courses:knowledge_base_and_expert_system:lab3 [2019/10/03 22:58] andrey.suchkov [Цель работы] |
courses:knowledge_base_and_expert_system:lab3 [2019/10/14 20:55] andrey.suchkov [Основные теоретические положения] |
||
---|---|---|---|
Line 22: | Line 22: | ||
integerlist=integer* | integerlist=integer* | ||
predicates | predicates | ||
- | printlist (integerlist) | + | printlist(integerlist) |
clauses | clauses | ||
- | printlist ([]):- !. % Для пустого списка ничего не делать | + | printlist([]) :- !. % Для пустого списка ничего не делать |
- | printlist ([H|T]):- write (H), nl, printlist (T). % Для непустого списка | + | printlist([H|T]) :- write(H), nl, printlist(T). % Для непустого списка |
- | % отделить голову, | + | % отделить голову, |
- | % вывести ее, | + | % вывести ее, |
- | % продолжить вывод для | + | % продолжить вывод для |
- | % хвоста списка | + | % хвоста списка |
</code> | </code> | ||
Line 39: | Line 39: | ||
intlist=integer* | intlist=integer* | ||
predicates | predicates | ||
- | inverting (intlist, intlist) | + | inverting(intlist, intlist) |
- | processing (integer, integer) | + | processing(integer, integer) |
clauses | clauses | ||
% обработка пустого списка дает, в результате, тоже пустой список | % обработка пустого списка дает, в результате, тоже пустой список | ||
- | inverting ([ ], [ ]):- !. | + | inverting([ ], [ ]) :- !. |
% если список непустой, отделить голову, обработать ее, | % если список непустой, отделить голову, обработать ее, | ||
% и добавить в качестве головы списка-результата | % и добавить в качестве головы списка-результата | ||
- | inverting ([H | T], [Inv_H | Inv_T]):- | + | inverting([H | T], [Inv_H | Inv_T]):- |
- | processing (H, Inv_H), inverting (T, Inv_T). | + | processing(H, Inv_H), inverting(T, Inv_T). |
% предикат processing выполняет действия по обработке элемента списка в | % предикат processing выполняет действия по обработке элемента списка в | ||
% зависимости от его знака, предикат имеет два предложения, | % зависимости от его знака, предикат имеет два предложения, | ||
% так как нужно рассмотреть два варианта: ненулевое и нулевое значения | % так как нужно рассмотреть два варианта: ненулевое и нулевое значения | ||
- | processing (0, 0):- !. | + | processing(0, 0) :- !. |
- | processing (H, Inv_H):- Inv_H=-H. | + | processing(H, Inv_H) :- Inv_H=-H. |
goal | goal | ||
- | inverting ([-2, -1, 0, 1, 2], Inv_List), write("Inv_List=", Inv_List). | + | inverting([-2, -1, 0, 1, 2], Inv_List), write("Inv_List=", Inv_List). |
</code> | </code> | ||
Результат работы программы: | Результат работы программы: |