Ответ в теме: Посчитать количество цифр на первом и третьем уровне вложенности

      Комментарии к записи Ответ в теме: Посчитать количество цифр на первом и третьем уровне вложенности отключены
#1904

questioner
Участник

Немного почитав о прологе решил задачу так:

is_list([]) :- !.
is_list([_|_]) :- !.
  
count(List, Count) :-
  count(List, 1, Count).
count([], _, 0) :- !.
count([Atom | Tail], Lvl, Count) :-
  (Lvl = 1; Lvl = 3),
  count(Tail, Lvl, C1),
  (
    number(Atom) -> C2 = 1;
    is_list(Atom) -> L is 1 + Lvl, count(Atom, L, C2);
    C2 = 0
  ),
  Count is C1 + C2, !.
count([Atom | Tail], 2, Count) :-
  (
    is_list(Atom) ->count(Atom, 3, C1);
    C1 = 0
  ),
  count(Tail, 2, C2),
  Count is C1 + C2, !.
count(_, 4, 0) :- !.