2016-10-17 6 views

답변

0

생각해이 방법은 : 당신이 10 및 4의 모드를 찾으려면

, 당신은 4 10 분할 및 알림을 반환합니다. 그러나 나눗셈은 다중 뺄셈이기 때문에 여기에서 다중 뺄셈 논리를 사용할 것입니다. 예

: 10 mod 46-4 mod 4 = 2 mod 4로서 다시 동일 6 mod 410-4 mod 4 동일하다. 첫 번째 요소 (2)가 두 번째 요소 (4)보다 작기 때문에 여기에서 프로그램을 종료하고 첫 번째 요소 (2)를 반환합니다.

mod(_, 0, 0).

0 개조 아무것도 0

mod(0, _ , 0). 0 개조 아무것도

mod(X, s(0), 0). 0 1 개조 아무것도 0

이 까다로운 부분 인 것을 나타는 것을 말한다는 것을 말한다 :

mod(A, B, N) :- minus(A, B, R), (R @< B -> N = R ; mod(R, B, N)). 이것은 다중 마이너스 논리를 사용합니다. 처음에 두 번째를 먼저 제거한 다음 첫 번째가 두 번째보다 작은 지 확인합니다. 그렇다면 mod 함수를 재귀 적으로 호출하십시오. 반환하지 않으면 첫 번째 요소를 반환합니다.

s(0). 
s(X):- X. 

plus(0, Y, Y). 
plus(s(X), Y, s(Z)):- plus(X , Y , Z). 

minus(A, B, C) :- plus(C, B, A). 

mod(_, 0, 0). 
mod(0, _ , 0). 
mod(X, s(0), 0). 
mod(A, B, N) :- minus(A, B, R), (R @< B -> N = R ; mod(R, B, N)). 

@Toby에게 수정 요청 해 주셔서 감사합니다.

+0

이 코드는 문제를 해결하는 데 도움이 될 수 있지만 _why_ 및/또는 _how_는 질문에 대답하지 않습니다. 이러한 추가적인 맥락을 제공하면 장기적인 교육적 가치가 크게 향상 될 것입니다. 어떤 제한 사항 및 가정이 적용되는지를 포함하여 설명을 추가하기 위해 답을 [편집하십시오]. –