LAZBM@CUNYVM.CUNY.EDU (10/02/89)
This is my solution to the jobs puzzle. It works, but it would be nice to write down the problem and that would be the solution. Anybody has a better solution? /* The jobs puzzle * 1 There are four people roberta thelma steve and pete * 2 Among them,they hold eight different jobs * 3 Each holds exactly 2 jobs * 4 The jobs are:chef,guard,nurse,telephone operator, * police officer(gender not implied) teacher actor boxer * 5 The job of nurse is held by a male * 6 The husband of the chef is the telephone operator * 7 Roberta is not the boxer * 8 Pete has no education past ninth grade * 9 Roberta, the chef and the police officer went golfing together */ solve:-joblist(Jlist), del(J1,Jlist,Jl1),del(J2,Jl1,Jl2),J1 < J2 ,hasjobs(roberta,J1,J2), del(J3,Jl2, Jl3),del(J4,Jl3,Jl4),J3 < J4 ,hasjobs(thelma ,J3,J4), del(J5,Jl4 ,Jl5),del(J6,Jl5,Jl6),J5 < J6 ,hasjobs(steve ,J5,J6), del(J7,Jl6 ,Jl7),del(J8,Jl7,Jl8),J7 < J8 ,hasjobs(pete ,J7,J8), write('roberta '),write(J1),write(' '),write(J2),nl, write('thelma '),write(J3),write(' '),write(J4),nl, write('steve '),write(J5),write(' '),write(J6),nl, write('pete '),write(J7),write(' '),write(J8),nl. hasjobs(X,chef,police):-!,fail. /*9 */ hasjobs(X,police,chef):-!,fail. /*9 */ hasjobs(X,telop,chef):-!,fail. /*6 */ hasjobs(X,chef,telop):-!,fail. /*6 */ hasjobs(X,J1,J2):- hasjob(X,J1), hasjob(X,J2). hasjob(roberta,chef):-!,fail. /*9 */ hasjob(roberta,police):-!,fail. /*9 */ hasjob(pete,police):-!,fail. /*8*/ hasjob(pete,nurse ):-!,fail. /*8*/ hasjob(pete,teacher):-!,fail. /*8*/ hasjob(roberta,boxer):- !,fail. /*7*/ hasjob(X,nurse):- !,male(X). /*5*/ hasjob(X,actor):- !,male(X). /* meaning of actor*/ hasjob(X,telop):-!,male(X). /*6 */ hasjob(X,chef ):-!,not male(X). /*6 */ hasjob(X,Y). male(steve). male(pete ). /* list symbol is { } in this prolog */ joblist({chef,guard,nurse,telop,police,teacher,actor,boxer}). del(X,{X|T},T). del(X,{Y|T},{Y|T1}) :- del(X,T,T1).