Проблема оценки, если число содержит ‘0’ в Prolog

#prolog

#prolog

Вопрос:

На самом деле, я пишу код, чтобы определить, содержит ли число какой-либо 0. Имя функции — haveZero. Например, haveZero(109) должно возвращать true, а haveZero(211) должно возвращать false. Это код, который я написал, но, похоже, что только базовый вариант haveZero (0) и другие числа, которые заканчиваются на ‘0’, могут возвращать true.

введите описание изображения здесь

Комментарии:

1. Добро пожаловать в StackOverflow. Не размещайте изображения кода или ссылки на них, вставляйте в сам код.

Ответ №1:

Простым решением является использование стандартного number_codes/2 предиката и предиката de facto standard memberchk/2 :

 has_zero(Number) :-
    number_codes(Number, Codes),
    memberchk(0'0, Codes).
  

0'0 Термин представляет собой стандартное числовое обозначение, которое позволяет нам получить код символа, следующего за 0' префиксом.

Примеры вызовов:

 | ?- has_zero(109).
yes

| ?- has_zero(211).
no
  

Ответ №2:

is означает присвоение в prolog. Ваш код присваивает (число mod 10) значение 0, поэтому только число mod 10 равно 0 (заканчивается на 0) может быть истинным.