2017-02-05 7 views
1

Я работаю над базовым проектом в Prolog. Я хочу написать функцию, которая возвращает число, основанное на списке ввода. Я также хочу убедиться, что, когда список ввода пуст, результат будет ложным. Функция должна быть такой: parseList (List, N), где N - число. Я хотел бы знать способ, который возвращает False, когда мы попробуембазовый регистр для возврата false на условие пролог

parseList([], N). 

где N - любое число.

Я попытался сделать это для базового случая

parseList([], False). 

Однако, это не похоже на работу.

Может ли кто-нибудь помочь мне в этом? Спасибо!

+0

Вы не «возвращаете» значение «false» в Prolog. Предикат терпит неудачу (результат «false»), если он не может преуспеть в заданных аргументах. Таким образом, отсутствие предложения предиката, которое поддерживает пустой список, автоматически завершится ошибкой. Просто оставьте 'parseList ([], N)' из вашего кода. – lurker

+0

Но, не должно быть базового случая для поддержки предиката, .i.e. точка остановки для предиката, когда список не пуст? – therealdev

+0

Ваш базовый футляр не должен обрабатывать пустой список. Он может обрабатывать список из одного элемента: * eg *, 'parseList ([X], N): - ...', тогда ваш рекурсивный случай может обрабатывать два или более элемента, 'parseList ([X, Y | T], N): - ... '. – lurker

ответ

1

Как сказал Луркер в своем комментарии, в этом случае, оставляя пустое условие списка, и обработка списка одного элемента приведет к сбою пустого списка. Однако в более общем случае, если вы хотите объявить неверное правило, просто включите false, потому что это никогда не может быть правдой, или fail, который делает то же самое. Например:

parseList([],_) :- false. 

или (ныне устаревший)

parseList([],_) :- fail. 

(где _ используются для обозначения несущественных переменного, в противном случае одноплодного переменного предупреждение будет срабатывать).

+0

'false/0' - лучший выбор и последнее дополнение к стандарту ISO: это более очевидная противоположность' true/0'. 'fail/0' - это противоположность' success/0', который вообще недоступен. – mat

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

  • Нет связанных вопросов^_^