#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) может быть истинным.