© Ευάγγελος Κουράκος Μαυρομιχάλης, 2006 |
Προηγούμενο | Περιεχόμενα | Επόμενο |
Δυναμική τροποποίηση προγράμματοςΈνα από τα σημαντικά χαρακτηριστικά της Prolog είναι η δυνατότητα δυναμικής τροποποίησης τόσο των γεγονότων που εισάγουμε στη βάση δεδομένων (μέσω του editor) όσο και των κανόνων. Έτσι ένα πρόγραμμα Prolog μπορεί να προσαρμόζεται δυναμικά ανάλογα με τα νέα δεδομένα που εισάγει ο χρήστης ή γενικότερα ανάλογα με τη κατάσταση του περιβάλλοντος στο οποίο τρέχει. Η Prolog διακρίνει δύο κατηγορίες γεγονότων (και κανόνων): τα στατικά και τα δυναμικά. Ένα γεγονός χαρακτηρίζεται στατικό αν το έχουμε εισάγει μέσω του editor. Στα γεγονότα αυτά, η Prolog δεν επιτρέπει καμία αλλαγή (διαγραφή ή εισαγωγή νέων) από τη στιγμή που γίνουν compiled. Ένα γεγονός ή κανόνας χαρακτηρίζεται δυναμικό σε δύο περιπτώσεις:
ΠαραδείγματαΈστω ότι έχουμε γράψει στον editor τα παρακάτω γεγονότα και κανόνες και ότι τα έχουμε κάνει compiled:
Τότε τα γεγονότα b/1 καθώς και οι κανόνες c/1 θεωρούνται δυναμικά (λόγω τις dynamic/1), ενώ τα γεγονότα a/1 και d/1 θεωρούνται στατικά. Η εισαγωγή νέων δυναμικών γεγονότων ή κανόνων γίνεται με τις ενσωματωμένες εντολές asserta/1 και assertz/1, ενώ η διαγραφή γίνεται με την εντολή retract/1. Η εντολή asserta/1 εισάγει ένα νέο γεγονός στην αρχή της βάσης δεδομένων, ενώ η εντολή assertz/1 εισάγει ένα νέο γεγονός στο τέλος αυτής. Για παράδειγμα αν δόσουμε την εντολή: ?- listing.
Έστω ότι έχουμε τα παρακάτω γεγονότα και θέλουμε να αθροίσουμε τους αριθμούς που περιέχουν.
a(1).
Για να αθροίσουμε τους αριθμούς αυτούς θα κάνουμε χρήση ενός βοηθητικού γεγονότος sum_temp/1 στο οποίο θα κρατάμε το τρέχουν μέγιστο αριθμό καθώς διαβάζουμε ένα-ένα τα γεγονότα.
:-dynamic(sum_temp/1).
|