2014-03-19 3 views
-1

필자가 작성한 프로그램의 일부로 변수가 주어진 목록에서 2 개의 숫자를 곱한 결과 인 어떤 숫자와도 같지 않은지 확인해야합니다. 예를 들어 Primes = [2, 3, 5, 7, 11] 목록을 얻었고 X가 6 (2 * 3) 또는 55와 같이 곱해진 두 숫자와 같지 않은지 확인해야합니다. (* 11 (5)) 등 ...SWI-Prolog 목록 조작

다음 I 가지고있는 코드 :

list(Numbers):- 
      Numbers = [X, Y, Sum], 
      between(3,6,Y), 
      between(3,6,X), 
      Primes = [2, 3, 5, 7, 11], 
      Sum is X+Y, 
      (Code i need help with) 

상기 코드 [3,3,6], [4,3,7 결과를 입력 wiill ], [5,3,8] 등등. 이제 내가 원하는 것은 총합이 소수 일 때를 식별하고 결과에서 제외하는 것입니다. Sum \ = prime * prime과 같은 것. 그러나 두 개의 요소를 함께 곱한 다음 목록의 모든 요소에 대해 수행하기 위해 프라임의 요소를 반복하는 방법을 모르겠습니다.

희망적입니다. 나는 사물을 설명하는 데별로 좋지 않습니다.

미리 감사드립니다.

답변

0

이 코드에 비효율적하지만, 쉽게 :

... 
forall((nth(I,Primes,X),nth(J,Primes,Y),J>I), Sum =\= X*Y). 

난 당신이 memberchk/2를 사용 후, 미리 계산 된 요소의 목록을 초기화하는 루프를 사용할 수 있습니다 생각합니다.

SWI-Prolog에서 nth/3 대신 nth1/3을 사용하십시오.