предупреждение в прологе - PullRequest
8 голосов
/ 21 января 2011

Я написал этот предикат в прологе:

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

это работает хорошо, но я получил это предупреждение:

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

что я могу сделать, чтобы избежать этого?

Ответы [ 2 ]

16 голосов
/ 21 января 2011

Предупреждение говорит о том, что у вас есть переменная, использованная только один раз в этом предложении списка предикатов (в данном случае второе предложение).

Почему он предупреждает вас об этом? Потому что чаще всего вы ошиблись именем переменной. Результирующий код, когда вы неправильно пишете переменную, также является допустимой программой пролога, поэтому отладка будет болезненной, если она не предупредит вас.

Если вы не собираетесь использовать эту переменную (X), вы можете использовать вместо нее анонимную переменную. Чтобы использовать анонимную переменную, вы должны использовать _ как термин вместо имени переменной.

В вашем примере это будет:

list([]).
list([_|L]) :- list(L).
2 голосов
/ 12 июня 2012

Гусбро абсолютно прав.Когда вы используете переменную только один раз, вы получите одноэлементную переменную.Ваша программа по-прежнему синтаксически верна, но пролог предполагает, что вы допустили ошибку при вводе кода.Переменная подчеркивания всегда объединяется как true, если ей дан какой-либо ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...