Εισαγωγή στην prolog και ένα δένρο

 Η prolog είναι γλώσσα προγραμματισμού που χρησιμοποιείται στην τεχνητή νοημοσύνη και στη γλωσσολογία. Ξεκινάμε εγκαθιστώντας την SWI Prolog στο σύστημά μας και διαβάζουμε απλά παραδείγματα εδώ.

Σε ένα απλό κειμενογράφο γράφω κώδικα και σώζω το αρχείο ως ***.pl

Για το παράδειγμά μας θα χρησιμοποιήσω το παρακάτω δένδρο 

 


και θα δημιουργήσω αυτό το αρχείο: tree.pl

που μέσα του έχει αυτόν τον κώδικα

 :- op(500,xfx,'is_parent').

cathy is_parent michael.    michael is_parent charles.     melody is_parent jim.     
cathy is_parent melody.    michael is_parent hazel.     melody is_parent eleanor.     


getchildren(Parent, Children) :-
    findall(Child, Parent is_parent Child, Unsorted),
    sort(Unsorted, Children).

depthfirst([], []).
depthfirst([Node|Frontier], [Node|Visited]) :-
    getchildren(Node, Children),
    append(Children, Frontier, NewFrontier),
    depthfirst(NewFrontier, Visited).

breadthfirst([], []).
breadthfirst([Node|Frontier], [Node|Visited]) :-
    getchildren(Node, Children),
    append(Frontier, Children, NewFrontier),
    breadthfirst(NewFrontier, Visited).

 Ανοίγω το SWI Prolog και βρίσκομαι εδώ


 

Εδώ αντί για το $ θα αγαπήσετε το ?-

 Θα πω στην prolog να διαβάσει το αρχείο είτε με το ποντίκι πατώντας File/Consult/MyDocuments/tree.pl


 

είτε γράφοντας εντολή στην κονσόλα

?- consult('tree.pl')

Μόλις διαβάσει μου γράφει true.

Αμέσως ρωτάω: είναι γονιός η cathy της  melody και βάζω τελεία

?- is_parent(cathy,melody).

Αυτό απαντάει true. δοκιμάστε και άλλα ονόματα για να δείτε και το false.

Μετά ρωτάω: είναι γονιός η cathy σε ποιούς? κεφαλαίο γράμμα σημαίνει κάποια μεταβλητή.

?- is_parent(cathy,X).

Απαντάει michael (το πρώτο παιδί που βρίσκει) εγώ πατάω semicolon ; 

και γράφει και το επόμενο παιδί. Επειδή δεν υπάρχει άλλο παιδί βάζει τελεία και με φέρνει στην αρχή

?- is_parent(cathy,X).
X = michael ;
X = melody.

?- 



Δοκιμάστε τις παρακάτω εντολές

?- is_parent(Χ,hazel).

?- is_parent(X,Y). {πατήστε semicolon :}

 ?- depthfirst([some_name], Path), print(Path).

 ?- breadthfirst([some_name], Path), print(Path).


 



No comments:

Post a Comment

5 έργα για να εξοικειωθώ με τη Linux

  Επειδή στην αρχή η Linux φαίνεται δύσχρηστη και αποκαρδιωτική, ορίστε 5 εύκολα πρότζεκτ για να εξοικειωθούμε μαζί της. Desktop Drive...