2012-04-11 1 views
1

주어진 숫자에 대한 약수를 계산할 술어에 대한 연구를하고 있습니다. 그것은 그들 모두를 세지는 않을 것이지만 그것이 두 가지 이상의 요인을 가지고 있다는 것을 알기에 충분할 것입니다. 여기에 내가 무엇을 가지고 : 그러나프롤로그 카운트 제수

countFactors([_,_,_,_X]):-!. 
countFactors(Product, Count,Divisor, _X):- 
    Divisor =< Product/2, 
    Product mod Divisor = 0, 
    NewC is Count + 1, 
    NextD is Divisor + 1, 
    countFactors(Product,NewC, NextD, NewC). 

, countFactors (16,0,2, X)를 실행. 단순히 반환 X = 2

EDIT : 좋아, 그래서 지금 왜 나는 false를 반환 깨닫습니다 : 문제의 제수 요인 및 재귀 경우 잘 작동합니다. 그러나 요소가 아니라면 false를 제공하지만 다음 나누기로 증가하지는 않으며 중지하고 false를 반환합니다.

제 질문은 어떻게 수정합니까?

답변

1

코드에 약간의 오류가 있습니다. 수정을 게시합니다. 아마도 사소한 수정을해야 할 것입니다.

%% count all factors of Product 
% 
countFactors(Product, Count, Divisor, Tot) :- 
    Divisor > Product/2, 
    !, Tot is Count. 
countFactors(Product, Count, Divisor, Tot):- 
    ( Product mod Divisor =:= 0 
    -> NewC is Count + 1 
    ; NewC is Count 
    ), 
    NextD is Divisor + 1, 
    countFactors(Product, NewC, NextD, Tot). 
+0

죄송합니다. 귀하 께서 여기서 한 일을 정말로 이해하지 못합니다. 이 모든 작업은 입력 제품에 대해 X = 2를 반환합니다. 즉 countFactors (3,0,2, X). X = 2를 반환합니다. 분명히 이것은 사실이 아닙니다 ... – XavierNuquos

+0

죄송합니다, 디버깅하지 못했습니다 ... – CapelliC