You are on page 1of 2

%trace

Domains
i=integer
list = i*
ch=char
list2=ch*
Predicates
member(i,list)
add(i,list,list)
add2(i,list,list)
add3(i,list,list)
add4(i,list,list)
append(i,list,list)
append2(list,list,list)
length(list,i)
sum(list,i)
multi(list,i)
delete(i,list,list)
reverse(list,list)
last(list,i)

Clauses

member(X,[X|_]).
member(X,[_|T]):-member(X,T).

add(X,L,[X|L]).

add2(X,[H|T],[H,X|T]).

add3(X,[H1,H2|T],[H1,H2,X|T]).

append(X,[],[X]).
append(X,[H|T],[H|L]):-append(X,T,L).

add4(X,[H1,H2,H3|T],[H1,H2,H3,X|T]).

length([],0).
length([_|T],N):-length(T,N1),N=N1+1.

sum([],0).
sum([H|T],N):-sum(T,N1),N=N1+H.

multi([],1).
multi([H|T],N):-multi(T,N1),N=N1*H.

delete(H,[H|T],T).
delete(X,[H|T],[H|L] ):-delete(X,T,L).

reverse([],[]).
reverse([H|T],L):-reverse(T,L2),append2(L2,[H],L).

append2([],L,L).
append2([H|T],L,[H|L2]):-append2(T,L,L2).

last([H],H).
last([_|T],X):-last(T,X).

You might also like