Re: prolog like search
- To: mathgroup at smc.vnet.net
- Subject: [mg76675] Re: prolog like search
- From: dh <dh at metrohm.ch>
- Date: Fri, 25 May 2007 06:47:02 -0400 (EDT)
- References: <f33rbj$mod$1@smc.vnet.net>
Hi Nameless, try this: entities={william,henry,diana,charles}; Sonof[_,_]=False; Sonof[william,diana]=True; Sonof[william,charles]=True; Sonof[henry,diana]=True; Sonof[henry,charles]=True; Sonof[_,_]=False; Married[a_,b_]:=Or@@(Sonof[#,a]&&Sonof[#,b]&&(a=!=b)&/@ entities); PrologSearch[fun_,ent_]:=Cases[Outer[{fun[#1,#2],fun,{#1,#2}}&, ent,ent],{True,x__}:>{x},{2}]; PrologSearch[Married, entities] hope this helps, Daniel siewsk at bp.com wrote: > I would like to do prolog like searches in Mathematica > > entities={ william , henry , diana , charles } > Sonof(william,diana); > Sonof(william,charles); > Sonof(henry,diana); > Sonof(henry,charles); > > Married(A,B) := Sonof(S,A) && Sonof(S,B) && A != B; > > PrologSearch(Married,entities) > > returns { Married(diana,charles), Married(charles,diana) } > > Any idea how this could be implemented in Mathematica? > >