Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.3 alpha 4/15/85; site pucc-h Path: utzoo!watmath!clyde!cbosgd!ihnp4!inuxc!pur-ee!pucc-j!pucc-h!ags From: ags@pucc-h (Dave Seaman) Newsgroups: net.puzzle Subject: Re: Boodle Phil moiven? Message-ID: <2522@pucc-h> Date: Wed, 11-Dec-85 10:51:05 EST Article-I.D.: pucc-h.2522 Posted: Wed Dec 11 10:51:05 1985 Date-Received: Thu, 12-Dec-85 05:51:12 EST References: <343@mmm.UUCP> Organization: Purdue University Computing Center Lines: 103 Summary: Solution in Prolog This appears to be a programming exercise in Prolog. > Lucy sod'n pho Abner, kips Abner sod'n pho Lucy. person(lucy). person(abner). sodn_pho(X,Y) :- simple_sodn_pho(X,Y). sodn_pho(X,Y) :- simple_sodn_pho(Y,X). simple_sodn_pho(lucy,abner). > Hubert bink ptui Phil, kips Hubert bink ptui Abner. person(hubert). person(phil). bink_ptui(X,Y) :- person(X), person(Y), test_bink_ptui(X,Y). test_bink_ptui(hubert,phil) :- !. test_bink_ptui(X,Y) :- nonvar(Y), test_bink_ptui(X,_), !. > Leonard sod'n pho Phil. person(leonard). simple_sodn_pho(leonard,phil). > Lucy pock matoo Leonard myt Leonard pock matoo Myrtle, kips Myrtle moiven > Lucy. Lucy sod'n pho Hubert myt Myrtle sod'n pho Hubert, kips Lucy pock > matoo Myrtle. Leonard moiven Hubert myt Hubert bink ptui Phil, kips > Leonard moiven Phil. person(myrtle). simple_sodn_pho(lucy,hubert). simple_sodn_pho(myrtle,hubert). pock_matoo(X,Y) :- person(X), person(Y), test_pock_matoo(X,Y). test_pock_matoo(lucy,leonard) :- !. test_pock_matoo(leonard,myrtle) :- !. test_pock_matoo(X,Y) :- sodn_pho(X,Z), sodn_pho(Y,Z), !. moiven(X,Y) :- person(X), person(Y), test_moiven(X,Y,[Y]). test_moiven(leonard,hubert,_) :- !. test_moiven(X,Y,_) :- pock_matoo(Y,Z), pock_matoo(Z,X), !. test_moiven(X,Y,P) :- bink_ptui(Z,Y), not(member(Z,P)), test_moiven(X,Z,[Z|P]), !. member(X,[X|_]). member(X,[_|Y]) :- member(X,Y). > Kips, boodle Phil moiven? ?- moiven(phil,X). X = phil ; no -------------------------------------------------------------------------- Kips, Phil moiven nar Phil. [The answer.] "When I use a word," Humpty Dumpty said, in a rather scornful tone, "it means just what I choose it to mean -- neither more nor less." The database, in somewhat cleaner form: -------------------------------------------------------------------------- person(lucy). person(abner). person(hubert). person(phil). person(leonard). person(myrtle). sodn_pho(X,Y) :- simple_sodn_pho(X,Y). sodn_pho(X,Y) :- simple_sodn_pho(Y,X). simple_sodn_pho(lucy,abner). simple_sodn_pho(leonard,phil). simple_sodn_pho(lucy,hubert). simple_sodn_pho(myrtle,hubert). bink_ptui(X,Y) :- person(X), person(Y), test_bink_ptui(X,Y). test_bink_ptui(hubert,phil) :- !. test_bink_ptui(X,Y) :- nonvar(Y), test_bink_ptui(X,_), !. pock_matoo(X,Y) :- person(X), person(Y), test_pock_matoo(X,Y). test_pock_matoo(lucy,leonard) :- !. test_pock_matoo(leonard,myrtle) :- !. test_pock_matoo(X,Y) :- sodn_pho(X,Z), sodn_pho(Y,Z), !. moiven(X,Y) :- person(X), person(Y), test_moiven(X,Y,[Y]). test_moiven(leonard,hubert,_) :- !. test_moiven(X,Y,_) :- pock_matoo(Y,Z), pock_matoo(Z,X), !. test_moiven(X,Y,P) :- bink_ptui(Z,Y), not(member(Z,P)), test_moiven(X,Z,[Z|P]), !. member(X,[X|_]). member(X,[_|Y]) :- member(X,Y). -- Dave Seaman pur-ee!pucc-h!ags