% COSC 2P93 Midterm % Winter 2013 % B. Ross % Q3: stutter(A, B) repeats every element in list A, resulting in % list B. stutter([], []). stutter([A|T], [A, A|T2]) :- stutter(T, T2). % Q4: pairup(A, B, Pairs, Rem) pairs elements in lists A and B together, % putting them in Pairs. Any remainders from A or B are put in Rem (or else % [] if both same length). pairup([], B, [], B). pairup(A, [], [], A). pairup([A|X], [B|Y], [pair(A,B)|T], Rest) :- pairup(X, Y, T, Rest). % Q5: stat(L, M, S) computes the mean M and std dev S for list L. stats(L, Mean, Stdev) :- L \= [], mean(L, Mean), stdev(L, Mean, Stdev). % compute the mean... mean(L, Mean) :- sum(L, Sum), length(L, N), Mean is Sum/N. % sum the numbers in a list (hope they are numbers!) sum([], 0). sum([N|T], Sum) :- sum(T, Sum2), Sum is Sum2+N. % compute the std deviation... stdev(L, Mean, Stdev) :- sumdiff(L, Mean, Sumdiff), length(L, N), Stdev is sqrt(Sumdiff/N). % N2 is N-1, % Stdev is sqrt(Sumdiff/N2). % sumdiff computes sum sub-formula of std dev expression term. sumdiff([], _, 0). sumdiff([A|T], Mean, Sumdiff) :- X is A-Mean, Y is X*X, sumdiff(T, Mean, Sumdiff2), Sumdiff is Sumdiff2+Y.