% from Winston & Horn's LISP % Rules for animal identification. The first three rules are an % input loop. Enter attributes that match the patterns in the rules. % For example: has(robie,hair), or lays_eggs(suzie). These facts will % help identify robie and suzie. Enter "end" to end the input loop. % % The attributes can also be put in the list of initial_data. % Example: % % initial_data([ % has(dennis,hair), % has(dennis,hoofs), % has(dennis,black_stripes), % parent(dennis,diana) % ]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % MY INITIAL DATA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% initial:- jpl_datums_to_array([ 'has(animal,feathers)', 'has(animal,hair)', 'gives(animal,milk)', 'has(animal,feathers)', 'flies(animal)', 'lays_eggs(animal)', 'eats_meat(animal)', 'has(animal,pointed_teeth)', 'has(animal,claws)', 'has(animal,forward_eyes)', 'has(animal,hoofs)', 'chews_cud(animal)', 'has(animal,tawny_color)', 'has(animal,dark_spots)', 'has(animal,tawny_color)', 'has(animal,black_stripes)', 'has(animal,long_neck)', 'has(animal,long_legs)', 'has(animal,dark_spots)', 'does_not_fly(animal)', 'has_attr(animal,black_and_white)', 'swims(animal)', 'flies_well(animyal)', 'parent(animal,parent)', 'even_toed(animal)', 'has_attr(animal,slow)', 'has(animal,ears)'],L), jpl_new('miw2.MyCBForm',[L,'Choose facts:'],D), jpl_call(D,getChecked,[],_), jpl_get('miw2.MyCBForm',termos,{C}), assert(initial_data(C)). :- initial. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rule 1: [1: goal(animal_id)] ==> [assert(read_facts), retract(1)]. rule 2: [1: end, 2: read_facts] ==> [retract(all)]. rule 3: [1: read_facts] ==> [prompt('Attribute ? ',X), assert(X)]. rule id1: [1: has(X,hair)] ==> [assert(isa(X,mammal)), retract(all)]. rule id2: [1: gives(X,milk)] ==> [assert(isa(X,mammal)), retract(all)]. rule id3: [1: has(X,feathers)] ==> [assert(isa(X,bird)), retract(all)]. rule id4: [1: flies(X), 2: lays_eggs(X)] ==> [assert(isa(X,bird)), retract(all)]. rule id5: [1: eats_meat(X)] ==> [assert(isa(X,carnivore)), retract(all)]. rule id6: [1: has(X,pointed_teeth), 2: has(X,claws), 3: has(X,forward_eyes)] ==> [assert(isa(X,carnivore)), retract(all)]. rule id7: [1: isa(X,mammal), 2: has(X,hoofs)] ==> [assert(isa(X,ungulate)), retract(all)]. rule id8: [1: isa(X,mammal), 2: chews_cud(X)] ==> [assert(isa(X,ungulate)), assert(even_toed(X)), retract(all)]. rule id9: [1: isa(X,mammal), 2: isa(X,carnivore), 3: has(X,tawny_color), 4: has(X,dark_spots)] ==> [assert(isa(X,cheetah)), retract(all)]. rule id10: [1: isa(X,mammal), 2: isa(X,carnivore), 3: has(X,tawny_color), 4: has(X,black_stripes)] ==> [assert(isa(X,tiger)), retract(all)]. rule id11: [1: isa(X,ungulate), 2: has(X,long_neck), 3: has(X,long_legs), 4: has(X,dark_spots)] ==> [assert(isa(X,giraffe)), retract(all)]. rule id12: [1: isa(X,ungulate), 2: has(X,black_stripes)] ==> [assert(isa(X,zebra)), retract(all)]. rule id13: [1: isa(X,bird), 2: does_not_fly(X), 3: has(X,long_neck), 4: has(X,long_legs), 5: has_attr(X,black_and_white)] ==> [assert(isa(X,ostrich)), retract(all)]. rule id14: [1: isa(X,bird), 2: does_not_fly(X), 3: swims(X), 4: has_attr(X,black_and_white)] ==> [assert(isa(X,penguin)), retract(all)]. rule id15: [1: isa(X,bird), 2: flies_well(X)] ==> [assert(isa(X,albatross)), retract(all)]. rule id16: [1: isa(Animal,Type), 2: parent(Animal,Child)] ==> [assert(isa(Child,Type)), retract(all)]. rule id17: [1: even_toed(X), 2: has_attr(X,slow), 3: isa(X,ungulate)] ==> [assert(isa(X,sloth)), retract(all)].