Προγραμματισμός σε Prolog: Τα 4 λάθη που σκοτώνουν την εφαρμογή σου
Λογικός Προγραμματισμός: Τέσσερα Λάθη που Καταστρέφουν τον Κώδικα Prolog
Η Prolog κρατάει μια ιδιαίτερη γοητεία για όσους βαριούνται τις συνηθισμένες γλώσσες. Αντί να ακολουθήσεις τις εντολές βήμα-βήμα, περιγράφεις απλώς τι ισχύει και αφήνεις τον interpreter να βγάλει τα συμπεράσματα. Όταν όμως οι αρχές δεν τηρούνται, τα πράγματα γίνονται γρήγορα περίπλοκα.
Υπάρχουν τέσσερα κοινά λάθη που κάνουν τον κώδικα Prolog να δίνει λάθος απαντήσεις, να χάνει λύσεις ή να γίνεται σχεδόν αδύνατο να δοκιμαστεί. Ας τα δούμε πιο αναλυτικά.
Το Λάθος που Σκοτώνει τις Λύσεις Σιωπηλά
Όταν γράφεις ένα κατηγόρημα που δουλεύει μόνο με συγκεκριμένα δεδομένα, το πρόβλημα μπορεί να μην εμφανιστεί αμέσως. Μόλυς κάποιος το χρησιμοποιήσει με πιο γενικούς όρους, χάνει λύσεις που θα έπρεπε να υπάρχουν.
Αυτό συμβαίνει κυρίως όταν χρησιμοποιείς το cut (!) για να «επιταχύνεις» τον κώδικα ή όταν βασίζεται σε if-then-else και τύπου var/1. Αυτά τα εργαλεία λειτουργουν μόνο όταν τα δεδομένα είναι γνωστά, αλλά κάνen την ακρίβεια που η Prolog προσprechitte. Το κοινά παράδειγμα είναι το κλασικό factorial:
factorial(0, 1) :- !.
factorial(N, F) :-
N > 0,
N1 is N - 1,
factorial(N1, F1),
F is N * F1.
Αυτός deκεί den kann den Allgemeinheit ουδέν να υπολογίσει γενικά. Όταν το ερωτάς με γενικούς όρους, μόνο το N = 0, F = 1 επιστρέφει και μετά σταματάει.
Το Λάθος με το Ρύθμισμα της Βάσης
Κάθε νέος στα Prolog αρχάριος αντιλαμβάνεται πως το assertz/1 και το retract/1 έχουν μια δυναμική δύμ