1) /* function to append two lists */ /* first two are the inputs, last is the appended list */ append([], Y, Y). append([H|T], Y, [H|T2]) :- append(T, Y, T2). 2) makeset([], []). makeset([H|T], Res) :- member(H, T), makeset(T, Res), !. makeset([H|T], [H|Intermed]) :- not(member(H, T)), makeset(T, Intermed). 3) triple([], []). triple([H|T], [H,H,H|Rem) :- triple(T, Rem). 4) bubblesort(X, Y) :- append(M, [A,B|N], X), A > B, append(M, [B,A|N], S), bubblesort(S, Y), !. bubblesort(L, L). 5) a) female_author :- author(X), write(X), write(' is an author'), nl, female(X), write(' and female'), nl. female_author :- write('no such luck!'), nl. author(X) :- name(X). author(X) :- write('no more found!'), nl, fail. name(sartre) :- !. name(calvino). name(joyce). female(murdoch). female(bembridge). b) female_author :- !, author(X), write(X), write(' is an author'), nl, female(X), write(' and female'), nl. female_author :- write('no such luck!'), nl. author(X) :- name(X). author(X) :- write('no more found!'), nl, fail. name(sartre). name(calvino). name(joyce). female(murdoch). female(bembridge). c) female_author :- author(X), write(X), write(' is an author'), nl, female(X), write(' and female'), nl. female_author :- write('no such luck!'), nl. author(X) :- name(X), !. author(X) :- write('no more found!'), nl, fail. name(sartre). name(calvino). name(joyce). female(murdoch). female(bembridge). d) female_author :- author(X), !, write(X), write(' is an author'), nl, female(X), write(' and female'), nl. female_author :- write('no such luck!'), nl. author(X) :- name(X). author(X) :- write('no more found!'), nl, fail. name(sartre). name(calvino). name(joyce). female(murdoch). female(bembridge). e) female_author :- author(X), write(X), write(' is an author'), nl, female(X), write(' and female'), nl. female_author :- write('no such luck!'), nl. author(X) :- !, name(X). author(X) :- write('no more found!'), nl, fail. name(sartre). name(calvino). name(joyce). female(murdoch). female(bembridge).