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

정확하게 맞는지 확실하지 않으면 TEST IT입니다. –

+0

Frank : 텍스트를 4 칸 들여 쓰기하면 코드 형식으로 표시됩니다. 질문을 수정하고 시험해보십시오. 편집기 툴바의 주황색 물음표는 다른 서식 지정 마크 업과 함께 문서에 연결됩니다. – outis

답변

2

이들은 꼬리 재귀가 아닙니다. 누적기를 사용하여 꼬리 재귀 변형을 작성할 수 있습니다 (this answer 참조).

귀하의 합계가 비정상적입니다. 일반적으로 목록을 사용합니다. Prolog []는 비어있는 목록이고 [X | R]은 머리 X와 꼬리 R이있는 비어 있지 않은 목록의 패턴입니다.

+0

선생님, 저에게 재귀적인 방식으로 힘을 쓸 수있게 도와주세요. 나는 방금 그것을 배우기 시작했고 그것을 할 수 없다. 적어도 그들 중 한 명과 나를 도우 라. 감사합니다 Frank – FRANK

+2

그건 내 숙제가 아니라 숙제입니다. 너 강사조차도 아니야. 미안하지만, 나는 당신에게 특별한 해결책을주지 않을 것입니다. 당신은 스스로 생각하는 법을 배워야합니다. – starblue