나는 프롤로그를 처음 사용하며 코드에 무엇이 문제가 있는지 파악하는 데 어려움을 겪고 있습니다. 프롤로그의 순환 소수 검사
- numDigits는 N.에 Y에게 자릿수를 만드는 :
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).
: 나는 지금까지 나는이 코드를 가지고 circular prime numbers 을 찾기 위해 노력하고있다 (예 : 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