8.1.Двоично дърво.Представяне.Основни операции
   8.2.Граф.Представяне.Основни операции
   8.3.Пролог и КС-граматики
   8.4.Пресмятане на стойност на аритметичен израз
   8.5.Интерпретатор на подмножество на езика Пролог
8.5. Интерпретатор на подмножество на езика Пролог
Задача 1: Да се напише програма, която реализира интерпретатор на подмножество на езика Пролог. Решение: Интерпретаторът реализира конюнкция и дизюнкция на цели, а също предикатите: write, nl, assert, retract и listall. Програмата е списък от факти и правила. Създава се чрез предиката assert, който включва клаузата, която е негов аргумент в списъка. Изтриването на клауза от програмата става чрез предиката retract. interpr(L) :- write('?- '), read(C), run(C, L, L1), !, nl, write(yes), nl, interpr(L1). interpr(L) :- nl, write(no), nl, interpr(L1). run(write(C), L, L) :- write(C), !. run(nl, L, L) :- nl, !. run(assert(C), L, L1) :- append(L, [C], L1), !. run(retract(C), L, L1) :- delete(C, L, L1), !. run(listall, L, L) :- show(L), !. run((C1, C2), L, L1) :- run(C1, L, L2), run(C2, L2, L1). run((C1; C2), L, L1) :- run(C1, L, L1), !; run(C2, L, L1). run(C, L, L) :- mem_c(C, L). run(C, L, L1) :- mem_c((C :- T), L), run(T, L, L1). mem_c(X, [X|_]). mem_c(X, [_|Y]) :- mem_c(X, Y). show([]) :- !. show([H|T]) :- write(H), nl, show(T). delete(X, [], []). delete(X, [X|Y], Y) :- !. delete(X, [Y|Z], [Y|T]) :- delete(X, Z, T). Отношението run(C, L, M) реализира оценяване на целта С от програмата. Параметърът M съдържа новата програма, ако в резултат от оценката L се е променила или старата програма L, в противен случай.