Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:prolog:pllib:animals [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Animals ======
 +{{tag>​rules interactive}}
 +===== Description =====
 +The program uses its identification rules to determine the animal that you have chosen.
 +
 +**Source**: ​ PrologTutorial (on-line tutorial)
 +===== Download =====
 +Program source code: {{animals.pl}}
 +===== Listing =====
 +<code prolog>
 +/* prolog tutorial 2.17 Animal identification game.  ​
 +
 +    start with ?- go.     */
 +
 +go :- hypothesize(Animal),​
 +      write('​I guess that the animal is: '),
 +      write(Animal),​
 +      nl,
 +      undo.
 +
 +/* hypotheses to be tested */
 +hypothesize(cheetah) ​  :- cheetah, !.
 +hypothesize(tiger) ​    :- tiger, !.
 +hypothesize(giraffe) ​  :- giraffe, !.
 +hypothesize(zebra) ​    :- zebra, !.
 +hypothesize(ostrich) ​  :- ostrich, !.
 +hypothesize(penguin) ​  :- penguin, !.
 +hypothesize(albatross) :- albatross, !.
 +hypothesize(unknown). ​            /* no diagnosis */
 +
 +/* animal identification rules */
 +cheetah :- mammal, ​
 +           ​carnivore, ​
 +           ​verify(has_tawny_color),​
 +           ​verify(has_dark_spots).
 +tiger :- mammal,  ​
 +         ​carnivore,​
 +         ​verify(has_tawny_color), ​
 +         ​verify(has_black_stripes).
 +giraffe :- ungulate, ​
 +           ​verify(has_long_neck), ​
 +           ​verify(has_long_legs).
 +zebra :- ungulate,  ​
 +         ​verify(has_black_stripes).
 +
 +ostrich :- bird,  ​
 +           ​verify(does_not_fly), ​
 +           ​verify(has_long_neck).
 +penguin :- bird, 
 +           ​verify(does_not_fly), ​
 +           ​verify(swims),​
 +           ​verify(is_black_and_white).
 +albatross :- bird,
 +             ​verify(appears_in_story_Ancient_Mariner),​
 +             ​verify(flys_well).
 +
 +/* classification rules */
 +mammal ​   :- verify(has_hair),​ !.
 +mammal ​   :- verify(gives_milk).
 +bird      :- verify(has_feathers),​ !.
 +bird      :- verify(flys), ​
 +             ​verify(lays_eggs).
 +carnivore :- verify(eats_meat),​ !.
 +carnivore :- verify(has_pointed_teeth), ​
 +             ​verify(has_claws),​
 +             ​verify(has_forward_eyes).
 +ungulate :- mammal, ​
 +            verify(has_hooves),​ !.
 +ungulate :- mammal, ​
 +            verify(chews_cud).
 +
 +/* how to ask questions */
 +ask(Question) :-
 +    write('​Does the animal have the following attribute: '),
 +    write(Question),​
 +    write('?​ '),
 +    read(Response),​
 +    nl,
 +    ( (Response == yes ; Response == y)
 +      ->
 +       ​assert(yes(Question)) ;
 +       ​assert(no(Question)),​ fail).
 +
 +:- dynamic yes/1,no/1.
 +
 +/* How to verify something */
 +verify(S) :-
 +   ​(yes(S) ​
 +    ->
 +    true ;
 +    (no(S)
 +     ->
 +     fail ;
 +     ​ask(S))).
 +
 +/* undo all yes/no assertions */
 +undo :- retract(yes(_)),​fail. ​
 +undo :- retract(no(_)),​fail.
 +undo.
 +
 +</​code>​
 +===== Comments =====
  
pl/prolog/pllib/animals.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0