From paul@inet.co.za  Mon May 15 13:56:50 2000
Received: from exchange_rbk02.inet.co.za (exchange-rbk02.inet.co.za [196.38.91.22])
	by swi.psy.uva.nl (8.9.3/8.9.3) with ESMTP id NAA11525
	for <prolog@swi.psy.uva.nl>; Mon, 15 May 2000 13:56:48 +0200 (MET DST)
Received: from pdev.inet.co.za ([196.14.60.35]) by exchange_rbk02.inet.co.za with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21)
	id K81Z3PCZ; Mon, 15 May 2000 13:58:17 +0200
Date: Mon, 15 May 2000 15:46:21 +0200 (GMT+0200)
From: Paul Sephton <paul@inet.co.za>
To: Lisa Cavanaugh <lisa_ck60@hotmail.com>
cc: prolog@swi.psy.uva.nl
Subject: Re: interesting problem
In-Reply-To: <20000515063300.33026.qmail@hotmail.com>
Message-ID: <Pine.LNX.3.91.1000515154239.19575B-100000@pdev.inet.co.za>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

I _love_ these problems, and couldn't resist.  If this is a homework 
assignment, then so be it...

:-dynamic seated/2.

language([english,joe,chris,emily,heidi,isacc]).
language([french,beth,gong,isacc]).
language([korean,chris,dongoon,fred,jane]).
language([chinese,gong,heidi,jane,kenny]).

speaks(Lang, Person) :- language([Lang|People]), member(Person, People).

female(beth).
female(emily).
female(heidi).
female(chris).
female(jane).

male(Person) :- speaks(_, Person), not(female(Person)).

sex(Person, male)   :-  
  findall(P, male(P), PList), list_to_set(PList, PSet), !,
  member(Person, PSet).
sex(Person, female) :-  female(Person).

seatable(Left, Person) :-
  sex(Person, female), speaks(Lang, Person),  speaks(Lang, Left),  
  Left \= Person, not(seated(Left, _)), sex(Left, male).
seatable(Left, Person) :-
  sex(Person, male), speaks(Lang, Person), speaks(Lang, Left), 
  Left \= Person, not(seated(Left, _)).

seat(joe) :- seated(_, joe).
seat(Person) :-
  not(seated(_, Person)), seatable(Left, Person), not(seated(Left, _)),
  assert(seated(Left, Person)), seat(Left).
seat(Person) :- retract(seated(Person, _)), fail.
  
report :- 
  findall([Left, Right], seated(Left, Right), List),
  length(List, 11), report(List).
  
report([]) :- nl.
report([[_, Right]|T]) :- writef("%w-", [Right]), report(T).
  
go :-
  retractall(seated(_,_)), seat(joe), report, fail.
go.

% ?- go.
% joe-chris-dongoon-fred-jane-kenny-heidi-gong-beth-isacc-emily-
% joe-chris-fred-dongoon-jane-kenny-heidi-gong-beth-isacc-emily-
% joe-emily-isacc-beth-gong-heidi-kenny-jane-dongoon-fred-chris-
% joe-emily-isacc-beth-gong-heidi-kenny-jane-fred-dongoon-chris-
% 
% Yes

Have fun
Paul
_____________________________________________________________________________
Paul Sephton (paul@inet.co.za)                               INET Development
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ever wondered if jumping out of the frying pan might actually be refreshing?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

