#list #prolog #swi-prolog
#Список #пролог #swi-пролог
Вопрос:
Мне нужно написать предикат, который возвращает true, если данный список содержит только числа в прологе. Пример:
?- isDigit(['1', '2', '3']). true
Это код, который я создал до сих пор:
isDigit(X) :- digit(X). isDigit([X | Xs]) :- digit(X), isDigit(Xs). digit(1). digit(2). digit(3). digit(4). digit(5). digit(6). digit(7). digit(8). digit(9). digit(0).
Он каждый раз возвращает значение false, и я не понимаю, почему.
Спасибо
Комментарии:
1. Дорогой Франческо, не могли бы вы, пожалуйста, показать нам вашу текущую попытку и описать, где вы застряли?
2. Я добавил свой код и то, где я застрял. Спасибо
Ответ №1:
Я обнаружил две проблемы с вашим кодом. Первый:
isDigit(X) :- digit(X).
В вашем случае аргументом isDigit/1
является список, и вы хотите запросить элементы этого списка. Для обработки единственного элемента списка напишите его так:
isDigit([X]) :- digit(X).
Второе: 1
и '1'
отличаются. Попробуйте сделать это в качестве запроса:
?- isDigit([1, 2, 3]).
Проверено с помощью СВИСТА.