anthares правильно в том смысле, что вы должны уточнить свой базовый вариант.Однако вы также делаете вещи очень неэффективно с вашими append
звонками.В Прологе требуется некоторое время, чтобы привыкнуть к силе объединения, но, например, в этом случае это поможет вам сразу настроить список результатов.Попробуйте следующее:
addone([E|Tail], [E1|Rs]) :-
E1 is E+1,
addone(Tail, Rs).
Вот и все, что нужно сделать.Сразу же поместив E1
в шаблон второго аргумента, вы уже создали первый элемент списка результатов.Остальные элементы Rs
будут созданы во время рекурсии.Очень типичный образец Пролога.