2011-01-21 15 views
8

Ho scritto questo predicato nel prologo:avvertimento nel prologo

list([]). 
list([X|L]) :- list(L). 

funziona bene, ma ho ottenuto questo avvertimento:

**Warning: /Users/hw6.pl:2: 
      Singleton variables: [X]** % 

cosa posso fare per evitarlo?

risposta

16

L'avviso indica che una variabile viene utilizzata una sola volta nella clausola dell'elenco di predicati (in questo caso la seconda clausola).

Perché ti avvisa di questo? Perché è più che spesso che hai sbagliato a digitare il nome della variabile. Il codice risultante quando si misspell una variabile è anche un programma valido di prolog, quindi il debugging sarebbe doloroso se non ti avvisasse.

Se non si intende utilizzare tale variabile (X), è possibile utilizzare invece una variabile anonima. Per usare una variabile anonima devi usare _ come termine invece di un nome di variabile.

Nel tuo esempio sarebbe:

list([]). 
list([_|L]) :- list(L). 
2

Gusbro è esattamente a destra. Quando si utilizza una variabile solo una volta si otterrà una variabile singleton. Il tuo programma è ancora sintatticamente corretto, ma il prologo presume che tu abbia sbagliato a digitare il tuo codice. La variabile di sottolineatura sarà sempre unificata come vera se viene data una risposta.