% Alternative form to first fact: member1(X, [H|T]) :- X = H. member1(X, [X|T]). member1(X, [H|T]) :- member1(X, T). % Alternative form for first fact: treesearch(X, node(V, L, R)) :- V = X. % Alternative form for first fact: treesearch(X, N) :- node(X, L, R) = N. treesearch(X, node(X, L, R)). treesearch(X, node(Y, L, R)) :- X < Y, treesearch(X, L). treesearch(X, node(Y, L, R)) :- X > Y, treesearch(X, R). % We pick 'leaf' atom to indicate the leaf of a tree treeinsert(X, leaf, node(X, leaf, leaf)). treeinsert(X, node(X, L, R), node(X, L, R)). treeinsert(X, node(Y, L, R), node(Y, L1, R)) :- X < Y, treeinsert(X, L, L1). treeinsert(X, node(Y, L, R), node(Y, L, R1)) :- X > Y, treeinsert(X, R, R1). % Try it out in Prolog: % > swipl % ?- [test]. % ?- treeinsert(3, leaf, T), treeinsert(2, T, T1), treeinsert(4, T1, T2).