У меня есть простая программа пролога, которая должна находить все полные квадраты в списке и выводить их в новый список со счетчиком (perfect_squares / 3).
Вот мой текущий код
is_square(X) :- floor(sqrt(X))^2 =:= X.
perfect_squares(X,Y,Z) :-
perfect_square(X,Y,Z)
perfect_square([],Y,Z).
perfect_square([H|T],Y,Z) :-
is_square(H),
O= [H|Y],
length(O,F),
perfect_square(T,O,F).
perfect_square([H2|T2],Y,Z):-
perfect_square(T2,Y,Z).
Результатом является пустой список (Y) [], кажется, что значения не сохраняются в конце рекурсивного l oop. Я не уверен, как go сохранять значения без использования глобальных переменных.