У меня возникают проблемы с подсчетом количества списков во вложенном списке.Подсчет количества списков во вложенном списке
count_lists([H|T],R):-
atomic(H),!,
count_lists(T,NR),
R is NR+1.
count_lists([[H|T]|Rest],R):-
!,
count_lists([H|T],R1),
count_lists(Rest,R2),
R is R1+R2.
count_lists([],0).
Прежде всего, я стараюсь основной случай, когда элемент в списке является атомарным и, таким образом, следует увеличить счетчик на единицу. (Кроме того, я попытался удалить атомный предикат, потому что я понял, что из-за этого мой код будет вычислять количество элементов во вложенном списке, но он все равно не работает) Тогда, если первым элементом является сам список, Я рекурсивно перехожу на него и в оставшийся список, добавляя результаты. И третья оговорка гласит, что количество вложенных списков в пустом списке 0.
?count_lists([[1,5,2,4],[1,[4,2],[5]],[4,[7]],8,[11]],R).
должен возвращать 8, но вместо этого, возвращает 12.
Ваш предикат работает только для списков, рекурсивно построенных из пустых списков ':-('. –