2015-05-29 6 views
2

У меня задан вопрос в моем задании, который просит написать программу Prolog, которая принимает в качестве входных данных список чисел и преуспевает, если в списке содержится только 0s.Проверка того, что список содержит только нули

У меня возникли проблемы с тем, как программа ищет нули. Например, запрос типа:

?- zero([0,0,0,0]). 

Если дать нам истинное и она должна возвращать ложь, когда есть число, отличное от нуля в нем.

ответ

1

Обычно, один бы не определить надлежащий предикат для этого, но лучше использовать maplist/2 с целью:

..., maplist(=(0), Zs), ... 

Чтобы дать конкретный пример:

?- Zs =[A,B,C], maplist(=(0), Zs). 

Этот запрос соответствует:

?- Zs = [A,B,C], call(=(0), A), call(=(0), B), call(=(0), C). 

или еще проще:

?- Zs = [A,B,C], 0 = A, 0 = B, 0 = C. 

Если вы хотите определить это как отдельный предикат, не забудьте использовать его доброе имя. Каждый элемент списка равен нулю, а отношение описывает весь список таких нулей. Конвенция для списков в этом случае заключается в использовании слова множественного числа. Таким образом, zeros/1:

zeros([]). 
zeros([0|Zs]) :- 
    zeros(Zs). 
1

Почему вы просите нас сделать домашнее задание для вас? в любом случае, это очень простая рекурсия. что-то вроде:

zero([]). 
zero([0|T]) :- zero(T). 

Просто продолжайте пилинг нуля до тех пор, пока ваш список не станет пустым. это не так трудно;)

Смежные вопросы