сумма хвостовой рекурсии, мощность, gcd в прологе?

как я могу это сделать:

Дайте определение хвостовой рекурсии для каждого из следующих предикатов.
power(X,Y,Z): XY=Z.
gcd(X,Y,Z): Наибольший общий делитель X и Y равен Z.
sum(L,Sum): Сумма — это сумма элементов в Л.

до сих пор я сделал это, но не уверен, что это правильно

power(_,0,1) :- !.
power(X,Y,Z) :- Y1 is Y - 1,power(X,Y1,Z1),Z is X * Z1.

sum(void,0).
sum(t(V,L,R),S) :- sum(L,S1),sum(R,S2),  S is V + S1 + S2.

person FRANK    schedule 12.10.2009    source источник
comment
Если вы не уверены, что это правильно, ПРОВЕРЬТЕ ЭТО.   -  person Matt Ball    schedule 12.10.2009
comment
Фрэнк: если вы сделаете отступ в тексте на 4 пробела, он отформатирует его как код. Отредактируйте свой вопрос и попробуйте. Оранжевый вопросительный знак на панели инструментов редактора указывает на документ с другой разметкой форматирования.   -  person outis    schedule 15.11.2009


Ответы (1)


Это не хвостовая рекурсия. Вы можете написать хвостовые рекурсивные варианты с помощью аккумулятора, см. ">этот ответ.

Ваша сумма находится над деревом, что необычно, обычно можно использовать список. В Прологе [] — это пустой список, а [X|R] — образец непустого списка с началом X и хвостом R.

person starblue    schedule 12.10.2009
comment
Сэр, не могли бы вы помочь мне написать мощность рекурсивным способом? Я только начал изучать это и не могу этого сделать. Пожалуйста, помогите мне хотя бы с одним из них. Спасибо, Фрэнк. - person FRANK; 12.10.2009
comment
Это твоя домашняя работа, а не моя. Я даже не твой инструктор. Извините, я не буду давать вам конкретные решения, вы должны научиться думать сами. - person starblue; 12.10.2009