List Processing Code - CSC 366 Home Page - Demo

%%% File: lp.pro
%%% Line: List Processing 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% writelist

writelist([]).
writelist([H|T]) :- write(H),nl,writelist(T).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% member

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% size

size([],0).
size([_|T],L) :- 
  size(T,X),
  L is (X + 1).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% item

item(X,[H|_],H) :- X=0.
item(X,[_|T],Y) :-
  X > 0,
  Z is X - 1,
  item(Z,T,Y).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% append

append([],L,L).
append([H|T1],L2,[H|T3]) :- append(T1,L2,T3).

append(L1,L2,L3,Result) :- 
  append(L1,L2,L12),append(L12,L3,Result).
  
append(L1,L2,L3,L4,Result) :- 
  append(L1,L2,L3,L123),append(L123,L4,Result).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% last

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% remove

remove(_,[],[]).
remove(First,[First|Rest],Rest).
remove(Element,[First|Rest],[First|RestLessElement]) :-
  remove(Element,Rest,RestLessElement).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% replace

replace(0,Object,[_|T],[Object|T]).
replace(ListPosition,Object,[H|T1],[H|T2]) :-
  X is ListPosition - 1,
  replace(X,Object,T1,T2).
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% makelist

makelist(0,_,[]).
makelist(Length,Element,[Element|Rest]) :-
  X is Length - 1,
  makelist(X,Element,Rest).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% reverse

reverse([],[]).
reverse([H|T],R) :-
  reverse(T,Rev),lastput(H,Rev,R).
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% lastput

lastput(E,[],[E]).
lastput(E,[H|T],[H|L]) :- lastput(E,T,L).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% pick

pick(L,Item) :- 
  length(L,Length),
  random(0,Length,RN),
  item(RN,L,Item).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% take

take(List,Element,Rest) :-
  pick(List,Element),
  remove(Element,List,Rest).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% iota

iota(0,[]).
iota(N,IotaN) :- 
  NM1 is N - 1,
  iota(NM1,IotaNM1),
  lastput(N,IotaNM1,IotaN).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% sum

sum([],0).
sum([H|T],Sum) :-
  sum(T, SumT),
  Sum is H + SumT.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% min

min([H], H).
min([H | T], H) :- 
	min(T, L),
	H =< L, !.
min([_ | T], A) :-
	min(T, A).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% max

max([H], H).
max([H | T], H) :- 
	max(T, L),
	H >= L, !.
max([_ | T], A) :-
	max(T, A).
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% sort_inc

insert(H,T,[H|T]).
sort_inc([],[]).
sort_inc(Unordered,Ordered) :-
  min(Unordered,Minimum),
  remove(Minimum,Unordered,Rest),
  sort(Rest,Number),
  insert(Minimum,Number,Ordered).
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% sort_des

sort_dec([],[]).
sort_dec(A,B) :-
  sort_inc(A,C),
  reverse(C,B).
  
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 
  
%% make_set([a,b,a,c,d,e,c,a,f], Set). get rid of duplicates
%% Set = [a,b,c,d,e,f].
%% (hint: use member/ 3 clauses).

make_set([],[]).
make_set([H|T],Result) :-
  member(H,T),
  make_set(T,Result).
make_set([H|T], Result) :-
  make_set(T,Partial),
  Result = [H|Partial].
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% DEMO/CODE Alist

%% ?- alist([2,queen,7,ace,king],[club,spade,diamond,spade,heart],Alist).
%% [pair(2,club),pair(queen,spade),pair(7,diamond),pair(ace,spade),pair(king,heart)].

alist([],[],[]).
alist([H1|T1],[H2|T2], Alist) :- 
  insert([pair(H1,H2)],Nlist,Alist),
  alist(T1,T2,Nlist).
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% DEMO/CODE assoc

%% ?- assoc(Alist,ace,Result).
%% Result = spade.

assoc([pair(K,V)|_],K,V).
assoc([_|T],K,V) :-
  assoc(T,K,V).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% flatten

flatten([],[]).
flatten([H|T],L) :- 
  atom(H),
  flatten(T,Tflattened),
  append([H],Tflattened,L).
flatten([H|T],L) :- 
  flatten(H,FlatHead), 
  flatten(T,FlatTail),
  append(FlatHead,FlatTail,L).