1
我是Prolog的新手,很難弄清楚我的代碼出了什麼問題。 我試圖找到circular prime numbers 到目前爲止,我有這樣的代碼:在Prolog中檢查循環素數
isCircularPrime(N):-
prime(N),
numDigits(N, Y),
Y2 is Y-1,
rotate(N,Y,N2),
circularPrime(N2, Y2, Y2).
circularPrime(_, 0, _).
circularPrime(N, 1, _):-prime(N).
circularPrime(N, I, J):-
I > 1,
prime(N),
I2 is I-1,
rotate(N,J,N2),
circularPrime(N2,I2,J).
其中:
- numDigits使得Ÿ位數在N.
- 旋轉使N2 N的旋轉(例如12→21)。
- 素爲真,如果N是素數,否則爲假
目前,它遞歸無限每當一個數是素數,但不是圓形素(例如19,23,等等)。如果有人能夠解釋我做錯了什麼,我會非常感激。
下面是其他代碼的情況下,任何人想要對此進行測試自己:
prime(2).
prime(3).
prime(N):-
N>3,
N mod 2 =\= 0,
\+ divisible(N,3).
divisible(N,I):- N mod I =:= 0.
divisible(N,I):-
I*I < N,
I2 is I + 2,
divisible(N, I2).
numDigits(N, 1):-
N<10, N>0.
numDigits(N, X):-
N2 is N/10,
numDigits(N2, Y),
X is (Y+1).
rotate(N, L, R):-
LastDigit is N mod 10,
Base is div(N, 10),
Exponent is L - 1,
Num is 10**Exponent,
NewBase is LastDigit*Num,
R is Base + NewBase.
而是使用'^'代替'**'。 – false 2014-01-24 16:10:42