Программа определения отошения ex_tree(Tree,Ex)

Страницы работы

2 страницы (Word-файл)

Содержание работы

Задание:

Определите отношение ex_tree(Tree,Ex) выполненное, если число Ex является значением выражения, представленного в виде двоичного дерева. Допустимыми операциями в арифметическом выражении являются: +,-,*,/.

Программа на прологе:

domains

btree = tree(symbol, btree, btree); nul

predicates

ex_tree(btree, integer)

clauses

ex_tree(tree("/", tree(A, nul, nul),tree(B, nul, nul)), C) :- str_int(A, A1), str_int(B, B1), A1/B1=C.

ex_tree(tree("*", tree(A, nul, nul),tree(B, nul, nul)), C) :- str_int(A, A1), str_int(B, B1), A1*B1=C.

ex_tree(tree("-", tree(A, nul, nul),tree(B, nul, nul)), C) :- str_int(A, A1), str_int(B, B1), A1-B1=C.

ex_tree(tree("+", tree(A, nul, nul),tree(B, nul, nul)), C) :- str_int(A, A1), str_int(B, B1), A1+B1=C.

ex_tree(tree("/", tree(A, nul, nul),T2), C) :-  ex_tree(T2, B), str_int(A, A1), A1/B=C.

ex_tree(tree("*", tree(A, nul, nul),T2), C) :-  ex_tree(T2, B), str_int(A, A1), A1*B=C.

ex_tree(tree("-", tree(A, nul, nul),T2), C) :-  ex_tree(T2, B), str_int(A, A1), A1-B=C.

ex_tree(tree("+", tree(A, nul, nul),T2), C) :-  ex_tree(T2, B), str_int(A, A1), A1+B=C.

ex_tree(tree("/", T1,tree(B, nul, nul)), C) :- ex_tree(T1, A), str_int(B, B1), A/B1=C.

ex_tree(tree("*", T1,tree(B, nul, nul)), C) :- ex_tree(T1, A), str_int(B, B1), A*B1=C.

ex_tree(tree("-", T1,tree(B, nul, nul)), C) :- ex_tree(T1, A), str_int(B, B1), A-B1=C.

ex_tree(tree("+", T1,tree(B, nul, nul)), C) :- ex_tree(T1, A), str_int(B, B1), A+B1=C.

ex_tree(tree("/", T1,T2), C) :- ex_tree(T1, A), ex_tree(T2, B), A/B=C.

ex_tree(tree("*", T1,T2), C) :- ex_tree(T1, A), ex_tree(T2, B), A*B=C.

ex_tree(tree("-", T1,T2), C) :- ex_tree(T1, A), ex_tree(T2, B), A-B=C.

ex_tree(tree("+", T1,T2), C) :- ex_tree(T1, A), ex_tree(T2, B), A+B=C.

goal

ex_tree(tree("*", tree("5", nul, nul), tree("+", tree("1", nul, nul), tree("2", nul, nul) )),M), write(M).


domains

btree = tree(integer, btree, btree); nul

predicates

inside(integer,btree)

clauses

inside(X,tree(X,_,_)).

inside(X,tree(Root,Left,_)):-Root>X,inside(X,Left).

inside(X,tree(Root, _, Right)):-X>Root,inside(X,Right).

%goal

%inside(5, tree(5,nul,nul)).

%      inside(5, tree(10, tree(3,nul,tree(5, nul, nul)), tree(12, tree(15,nul, nul),nul)).

CALL:    inside(5,tree(10,tree(3,nul,tree(5,nul,nul)),tree(12,tree(15,nul,nul),nul)))

10>5

CALL:    inside(5,tree(3,nul,tree(5,nul,nul)))

REDO:    inside(5,tree(3,nul,tree(5,nul,nul)))

3>5

FAIL:    inside(5,tree(3,nul,tree(5,nul,nul)))

REDO:    inside(5,tree(3,nul,tree(5,nul,nul)))

5>3

CALL:    inside(5,tree(5,nul,nul))

RETURN:  *inside(5,tree(5,nul,nul))

RETURN:  inside(5,tree(3,nul,tree(5,nul,nul)))

RETURN:  *inside(5,tree(10,tree(3,nul,tree(5,nul,nul)),tree(12,tree(15,nul,nul),nul)))

Информация о работе