0

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

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

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

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. 
+1

Если вы не уверены, что это правильно, ПРОВЕРЬТЕ ЭТО. –

+0

Фрэнк: если вы вставляете текст в 4 пробела, он будет отформатировать его как код. Измените свой вопрос и попробуйте. Оранжевый знак вопроса в панели инструментов редактора ссылается на документ с другой разметкой форматирования. – outis

ответ

2

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

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

+0

Сэр, пожалуйста, помогите мне написать мощность в рекурсивном режиме? Я только начал изучать его и не могу этого сделать. Пожалуйста, помогите мне с одним из них, по крайней мере. Thanks Frank – FRANK

+2

Это ваша домашняя работа, а не моя. Я даже не ваш инструктор. Извините, я не дам вам конкретных решений, вы должны научиться думать самим. – starblue

 Смежные вопросы

  • Нет связанных вопросов^_^