2014-12-09 2 views
3

나는 프롤로그를 처음 사용하고 혼란 스럽다. [WMAPDY]에 대한 "싱글 톤 변수"가 계속 표시됩니다. 나는 어딘가에 때때로 그 경고가 쓸모 없다고 읽는다. 나는 또한 프로그램이 경고 때문에 모든 절을 컴파일하지 않을 것이라고 읽었는가?프롤로그 "싱글 톤 변수"경고

내가하려고하는 프로그램은 AM + PM = DAY를 "해결하는"암호 연산 퍼즐입니다.

누구든지이 오류를 도와 줄 수 있고 싱글턴 변수 경고가 항상 중요하다면 크게 감사하겠습니다 !!

스콧

경고 때문에이 라인의 생성
solve([A,M,P,D,Y]):- 
select(A,[0,1,2,3,4,5,6,7,8,9],WA), % W means Without 
not(A=0), 
select(M,WA,WMA), 
select(P,WMA,WMAP), 
not(P=0), 
select(D,WMAP,WMAPD), 
not(D=0), 
select(Y,WMAPD,WMAPDY), 
DAY is 100*D+10*A+Y, 
AM is 10*A+M, 
PM is 10*P+M, 
DAY is AM+PM. 
+2

는,이 변수 쓸모 경고의 아니에요! – CapelliC

+0

그래서 변수를 가져와야합니까? – NoobCoderChick

+1

구체적으로 말하면,'select (Y, WMAPD, WMAPDY)'식에서'WMAPDY' 변수는 다른 곳에서는 사용되지 않습니다. 즉,'select'는 사용하지 않은 결과를 제공합니다. 'select'가 필요 없다면 제거하십시오. 'select' 결과가 필요하다면 그것을 사용하십시오. – lurker

답변

3

:

select(Y,WMAPD,WMAPDY), 

이 프로그램은 따라서 그것은 쓸모없는, 그리고 프롤로그에 대해 경고, 다른 곳 변수 WMAPDY를 사용하지 않습니다 그것은 아마도 오타 일 가능성이 있기 때문입니다 (이 경우는 아닙니다). 경고를 제거하려면 몇 가지 가능성이 있습니다

  1. 사용 member/2 대신 select/3을, 당신은 결과 목록에 관심이없는 때문에 : member(Y,WMAPD)은.

  2. 변수를 싱글 톤으로 표시하십시오. _으로 변수를 시작하면 체크되지 않을 것입니다. 그들은 싱글 톤입니다 : select(Y, WMAPD,_WMAPDY). 또는 특수 싱글 톤 변수 _ : select(Y,WMAPD,_)을 사용할 수 있습니다. (이 설명은 적어도 SWI Prolog의 경우 사실이며 밑줄 친 변수 _WMAPDY은 더 많은 방언으로 작업 할 수 있습니다).

  3. 파일에 :- style_check(-singleton)을 사용하십시오. 이 경고는 오타를 찾는 데 유용하기 때문에 파일에 대한 모든 싱글 톤 변수 경고를 해제합니다. 오히려이를 사용하지 않을 것입니다. (이 desciption은 SWI Prolog를위한 것입니다. SICStus Prolog는 다른 시스템의 경우 single_var_warnings 옵션을 사용할 수 있습니다).

Here is the relevant section in the SWI-Prolog manual

+0

Patrick, 내 질문에 답해 주셔서 다시 한번 감사드립니다. 당신은 프롤로그 마스터입니다! – NoobCoderChick

+0

밑줄 문자로 시작하는 변수 (물론 익명 변수'_' 제외)는 Prolog 시스템에서 싱글 톤 ** depends **로보고되지 않습니다. 어떤 경우에는 밑줄 문자가 소문자인지 대문자인지에 따라 달라집니다 (예 : SWI-Prolog가 'a (_x, _Y, a) .' 절의'_x '를 단일 문자로보고 함). –

+0

OP의 이전 질문에서 그가 SWI를 사용한다는 것을 알았습니다. –

2

를 사용하지? very related question-my previous answer

건물, 우리는 쿼리 :

?- solve_n_dump([A,M] + [P,M] #= [D,A,Y]). 
Eq = ([2,5]+[9,5]#=[1,2,0]), Zs = [2,5,9,1,0]. 
Eq = ([2,7]+[9,7]#=[1,2,4]), Zs = [2,7,9,1,4]. 
Eq = ([2,8]+[9,8]#=[1,2,6]), Zs = [2,8,9,1,6]. 
Eq = ([3,5]+[9,5]#=[1,3,0]), Zs = [3,5,9,1,0]. 
Eq = ([3,6]+[9,6]#=[1,3,2]), Zs = [3,6,9,1,2]. 
Eq = ([3,7]+[9,7]#=[1,3,4]), Zs = [3,7,9,1,4]. 
Eq = ([3,8]+[9,8]#=[1,3,6]), Zs = [3,8,9,1,6]. 
Eq = ([4,5]+[9,5]#=[1,4,0]), Zs = [4,5,9,1,0]. 
Eq = ([4,6]+[9,6]#=[1,4,2]), Zs = [4,6,9,1,2]. 
Eq = ([4,8]+[9,8]#=[1,4,6]), Zs = [4,8,9,1,6]. 
Eq = ([5,6]+[9,6]#=[1,5,2]), Zs = [5,6,9,1,2]. 
Eq = ([5,7]+[9,7]#=[1,5,4]), Zs = [5,7,9,1,4]. 
Eq = ([5,8]+[9,8]#=[1,5,6]), Zs = [5,8,9,1,6]. 
Eq = ([6,5]+[9,5]#=[1,6,0]), Zs = [6,5,9,1,0]. 
Eq = ([6,7]+[9,7]#=[1,6,4]), Zs = [6,7,9,1,4]. 
Eq = ([7,5]+[9,5]#=[1,7,0]), Zs = [7,5,9,1,0]. 
Eq = ([7,6]+[9,6]#=[1,7,2]), Zs = [7,6,9,1,2]. 
Eq = ([7,8]+[9,8]#=[1,7,6]), Zs = [7,8,9,1,6]. 
Eq = ([8,5]+[9,5]#=[1,8,0]), Zs = [8,5,9,1,0]. 
Eq = ([8,6]+[9,6]#=[1,8,2]), Zs = [8,6,9,1,2]. 
Eq = ([8,7]+[9,7]#=[1,8,4]), Zs = [8,7,9,1,4]. 
true.