use strict; use AI::Proplog; my $p = new AI::Proplog; # # assert some facts: # # cs requirements are basic cs, math, advanced cs, an engr rec and nat. sc\ i. $p->a( cs_req => qw(basic_cs math_req advanced_cs engr_rec natural_science\ )); # basic cs requires an intro req, comp org, advanced programming and theor\ y $p->a( basic_cs => qw(intro_req comp_org adv_prog theory) ); # and so forth $p->a( intro_req => 'intro_cs'); $p->a( intro_req => qw(introI introII) ); $p->a( math_req => qw(calc_req finite_req alg_req) ); $p->a( calc_req => qw(basic_calc adv_calc) ); $p->a( basic_calc => qw(calcI calcII) ); $p->a( basic_calc => qw(calcA calcB calcC) ); $p->a( adv_calc => 'lin_alg'); $p->a( adv_calc => 'honors_linalg'); $p->a( finite_req => qw(fin_structI stat) ); $p->a( alg_req => 'fin_structII'); $p->a( alg_req => 'abs_alg'); $p->a( alg_req => 'abs_alg'); # here we assert a bunch of facts: # the following things have been taken: # cs intro, computer org, advanced programming, and theory $p->apl( qw(intro_cs comp_org adv_prog theory) ); # now do a bottom up search of the fact/rule space to see if the # basic cs requirements have been met my $R = $p->bottom_up('basic_cs'); # or: my $R = $p->top_down('basic_cs'); ok($R);