Если я вас правильно понимаю, вы хотите, чтобы min_elem(XS,X)
было истинным, если X
- это минимум квадратов в XS
.
Исходя из этого понимания, есть две проблемы:
В вашем базовом случае вы не берете квадрат.
В вашем рекурсивном случае вы берете квадрат минимума квадратовв хвосте.
Чтобы устранить эти проблемы, возведите в минимум минимальное значение в базовом случае и уберите квадратное значение в рекурсивном случае:
min_elem([X],Min) :- Min is X ^ 2.
min_elem([Head | Tail], Min) :-
min_elem(Tail, Tail_min),
Min is min(Head ^ 2, Tail_min).