Η 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