Я очень новичок в Prolog (исходит из C++), и у меня возникли проблемы с пониманием использования списков в качестве параметров. В частности, мне интересно, как учитывать случай, когда список имеет только один элемент (хвост «пуст»). Почему я не могу [L] как параметр сам по себе? Почему хвост должен быть явно включен?Проверить список из одного элемента в Prolog
/** Trying to print out the head of the list */
writeList([L|_]) :- write(L). /** Works fine */
writeList([L]) :- write(L). /** Doesn't work. Will return false, but why? */
writeList([L]) :- write([L]). /** I thought I'd try this to see if it was a
problem with write(), but this returns false as well. */
Единственный способ решение, которое я придумал (без создания тестов после «: -») был:
writeList([L|[]]) :- write(L).
Но это кажется немного неаккуратно, чтобы указать хвост [] , Есть ли более чистый способ сделать это?
Извините, если этот вопрос очень глупый - я пытался найти ответ на этот (довольно простой) вопрос, но я подозреваю, что в моем фундаментальном понимании есть проблема.
Предикат 'writeList ([L]): - write (L) .' работал отлично для меня. Моя цель была '? - writeList ([alice]).'. – Enigmativity
Имейте в виду, что прологовые цели преуспевают или терпят неудачу, они не __return__ true или false. – Enigmativity
Я думаю, что я называл это неправильно (я оглянулся назад, и я продолжал делать writeList (alice) и как-то постоянно забывал о скобках). Похоже, мое замешательство было просто от очень глупой ошибки - спасибо за ответ, вот что заставило меня понять. – uncreative