Почему это работает:пролог разрешение объединения
power(_,0,1) :- !.
power(X,Y,Z) :-
Y1 is Y - 1,
power(X,Y1,Z1),
Z is X * Z1.
И это дает исключение переполнения стека?
power(_,0,1) :- !.
power(X,Y,Z) :-
power(X,Y - 1,Z1),
Z is X * Z1.
не Y - Y '- Y '' - Y ''' ... - 1 в конечном счете равен нулю впадая в базовом случае и завершения рекурсии? – TheOne
Нет, в Prolog 'Y - 1', когда' Y = 1' по-прежнему 'Y - 1', пока он не связан :) –
Действительно - это просто синтаксическая форма. Инфиксная нотация - это только обозначение. Это эквивалентно - (Y, - (Y ', - (Y' ', Y' ''))). Который собирается просто расширяться навсегда, пока вы не свяжете семантический смысл с. Это то, что делает «-». –