Я пытаюсь сделать функцию пролога. Функция читает в предложении, а затем пытается извлечь ключевое слово. Если ключевое слово найдено, оно печатает сообщение. Я хочу, чтобы он также распечатывал сообщение, если ключевые слова не найдены. Вот мой пример:SWI Prolog - условный NOT?
contains([word1|_]) :- write('word1 contained').
contains([Head|Tail]) :- Head \= word1, contains(Tail).
contains([word2|_]) :- write('word2 contained').
contains([Head|Tail]) :- Head \= word2, contains(Tail).
contains([word3|_]) :- write('word3 contained').
contains([Head|Tail]) :- Head \= word3, contains(Tail).
Приведенный выше код проверяет и показывает, присутствует ли извлеченное слово. Но он не дает ответа, если слова «word1, word2 или word3» не содержатся. Кто-нибудь знает, как я должен это реализовать?
Я попытался добавить:
contains([_|_]) :- write('nothing contained'),nl.
contains([Head|Tail]) :- Head \= _, contains(Tail).
Но ясно, что это неправильно, что нужно делать.
Использование разрезов не считается приятным. – liori
Ну, использование разрезов означает, что ваша программа больше не является чистой логической программой, и они, безусловно, могут сделать чтение и отладку болезненным, но используются экономно, и в соответствующее время они могут дать более сжатый и эффективный код. Их трудно избежать при написании большой базы кода, в которой эффективность вызывает беспокойство. – nedned
Плюс, использование 'write' означает, что программа все равно не является логической. – bcat