Проверьте, состоит ли список только из чисел — Пролог

#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]).  

Проверено с помощью СВИСТА.