%L2 %Q5 takeout(E,[E | L1],L1). takeout(E,[F | L1],[F | L2]):- takeout(E,L1, L2). %Q7 inverse([E],[E]). inverse([H | L1], L):- var(L), inverse(L1,H2), append(H2,[H],L). inverse([H | L1], L):- nonvar(L), append(H2,[H],L), inverse(L1,H2). %Q8 inverse2(L1,L2):- inverse_iter(L1,[],L2). inverse_iter([],L2,L2):-!. inverse_iter([E |L1],L2,R):- inverse_iter(L1, [E | L2],R).