General
Material
Lecture 1
Lecture 2
Lecture 3
Lecture 4
Lecture 5

Interpreting the error messages and warnings that Prolog may give you

  • Prolog will tell you if the things that you are writing are syntactically incorrect.
    Download the knowledge base kb.syntax_error.pl and load it into Prolog. You will get the following answer.
    ?- consult('kb.syntax_error.pl').
    ERROR: /home/kris/lehre/esslli04/esslli04prolog/kbs/kb.syntax_error.pl:5: Syntax error: Operator expected
    ERROR: /home/kris/lehre/esslli04/esslli04prolog/kbs/kb.syntax_error.pl:11: Syntax error: Operator expected
    ERROR: /home/kris/lehre/esslli04/esslli04prolog/kbs/kb.syntax_error.pl:14: Syntax error: Unexpected end of clause
    ERROR: /home/kris/lehre/esslli04/esslli04prolog/kbs/kb.syntax_error.pl:17: Syntax error: Unexpected end of file
    % kb.syntax_error.pl compiled 0.00 sec, 1,348 bytes
    
    Yes
    This tells you that there are four syntax errors. It also tells you that the Prolog interpreter thinks that the errors are in lines 6, 12, 15, and 18. And it gives you some indications as to what might cause the problems (operator expected, unexpected end of clause/file).
    Which are the mistakes?
    Solutions
  • Another thing that you might get complaints about are singleton variables; i.e., variables which are used only once in a clause. Download the knowledge base kb.singleton_vars.pl and load it into Prolog. You will get the following:
    ?- consult('kb.singleton_vars.pl').
    Warning: (/home/kris/lehre/esslli04/esslli04prolog/kbs/kb.singleton_vars.pl:8):
            Singleton variables: [X, Y]
    % kb.singleton_vars.pl compiled 0.00 sec, 1,520 bytes
    
    Yes
    Prolog tells you that X and Y are singleton variables in the clause starting at line 8. Prolog warns you when it detects singleton variables, because singleton variables are often due to a typo (as in our example). Sometimes you do want to use variables which are mentioned only once in a clause. To avoid getting the singleton variable warning, you should use the anonymous variable _ instead of a named variable in this case.
  • Finally, Prolog complains when different clause belonging to the definition of the same predicate are not together in the file. Here is an example: kb.clauses_not_together.pl. When you load this knowledge base Prolog answers:
    ?- consult('kb.clauses_not_together.pl').
    Warning: (/home/kris/lehre/esslli04/esslli04prolog/kbs/kb.clauses_not_together.pl:14):
            Clauses of hate/2 are not together in the source-file
    % kb.clauses_not_together.pl compiled 0.00 sec, 0 bytes
    
    Yes
    The first clause of the definition of the predicate hate/2 is separated from the other two clauses by a rule with the head magical(X).

Back to the practical session of day 1.