2017-04-21 5 views
0

플레이어와 열을 계산하여 게임에서 짝수/홀수 플레이어와 짝수/홀수 열을 확인하려고합니다. 어떤 시점에서, 내 변수를 올바르게 인스턴스화하지 않는 것 같습니다. 제대로 할당되지 TotalPlayers 및 TotalCols와프롤로그 - 인수가 충분히 인스턴스화되지 않았습니다.

playGame(Game):- 
    countPlayers(Game,TotalPlayers), 
    colSize(Game,TotalCols), 
    checkEvens(TotalPlayers,TotalCols); 
    checkOdds(TotalPlayers,TotalCols). 

내가 문제를 가정있다 : 여기 내가 게임을 호출하는 방법입니다.

다른 질문을 시도했지만 문제가 다른 것 같습니다. 나는 프롤로그를 처음 접했고 어딘가에서 사소한 실수를 범하기 쉽다.

일부 추적 후에 홀수/짝수 조합이 입력 일 때 오류가 발생하는 것으로 보입니다. 두 개의 짝수 또는 두 개의 홀수를 입력하면 프로그램이 예상대로 작동합니다. 하나의 홀수와 짝수의 입력이 주어지면 끊어집니다.

전체 오류 :

ERROR: Arguments are not sufficiently instantiated 
ERROR: In: 
ERROR: [11] 1 is _34862 mod 2 
ERROR: [10] checkOdds(_34894,_34896) 
+1

'mod' 연산자는 모든 인수가 인스턴스화되어야합니다. '1 is X mod 2'에서 "x에 대해 풀"하지 않습니다. 어떤 검색어를 입력 했습니까? – lurker

+0

플레이어와 열을 전달 중입니다. 이것들은 totalPlayers와 TotalCols로서 columnsAndPlayers 술어에서 수집되어 전달됩니다. 그래서이 변수들이 인스턴스화되지 않았다고 가정합니다. – Tanner

+1

나는 일반적인 설명을 원하지 않았다. 오류가 발생했을 때 정확하게 입력 한 쿼리가 무엇입니까? 그리고 네, 오류 메시지에서 'Players'도 'Cols'도 인스턴스화되지 않았 음을 볼 수 있습니다 (이들은 익명 변수, '_34894' 및 _34896으로 표시됩니다). – lurker

답변

2
?- X = 3, between(1, X, 2), between(1, X, 3). 
X = 3. 

?- X = 3, between(1, X, 2); between(1, X, 3). 
X = 3 ; 
ERROR: Arguments are not sufficiently instantiated 
ERROR: In: 
ERROR: [9] between(1,_7656,3) 
ERROR: [7] <user> 
ERROR: 
ERROR: Note: some frames are missing due to last-call optimization. 
ERROR: Re-run your program in debug mode (:- debug.) to get more detail. 

당신이 무슨 일이 일어나고 있는지 발견 할 수 있습니까? 이 같은


술어 : a, bc과는 다른 "상황"에 참으로, 즉

foo :- a, b. 
foo :- c. 

:

foo :- a, b; c. 

는 같은 일이다.

흔히 a, (b ; c)을 말합니다. 이 때문에 일반적으로 ;이 줄의 시작 부분에 놓이고 주변에는 괄호를 사용합니다. 그래서 어느 것이

( a, 
    b 
; c 
) 

또는

a, 
( b 
; c 
) 

(같은 일을하지 않은!)

이 확실히 혼란 :

a, 
b; 
c 

당신은 볼 수 없습니다 "좋은"프롤로그 코드 (라이브러리 코드).

하지만 실제로, 교과서 나 다른 것을 읽으려고하면 Stackoverflow는 오류가 어디에 있는지 알기에는 좋지만 실제로 배우기에는 적합하지 않습니다.

+0

그래서 여기서는 이미 첫 번째 부분을 실행했기 때문에 X가 두 번째 범위에서 벗어난 것 같습니다. – Tanner

+0

@Tanner 편집보기 –