2013-05-07 3 views
-1

숙제를위한 논리 퍼즐을 해결하려면 SWI-prolog를 사용해야하지만 프로그래밍 배경에서도 구문과 의미가 매우 복잡합니다. 내가 직면하고있는 문제는 싱글 톤 변수에 대한 오류이며 퍼즐 반환 거짓.SWI-Prolog, 구문, 싱글 톤 오류 사용

이 내가 지금까지 한 일이다

:- use_module(library(clpfd)). 

sends(K,priscilla,C), 
    C#\=rose. 
sends(carol,L,rose). 
sends(dick,L,sun). 

sends(K,L,landscape). 
sends(bob,rhonda,C). 
sends(edna,quincy,C). 

sends(K,simon,deer). 
sends(K,tina,C). 

solve :- 
    sends(
     [alice,bob,carol,dick,edna], 
     [priscilla,rhonda,quincy,simon,tina], 
     [rose,heart,sun,landscape,deer]). 

이 질문입니다, 내가 언어를 더 잘 이해하는 데 도움이 올바른 방향으로 노골적 또는 답변을 주시면 감사하겠습니다! the question

+3

구문이 복잡하다는 사실은 흥미 롭습니다. 더 가벼운 예가 있습니까? – CapelliC

답변

2

단일 사용 변수가있는 모든 곳에서 싱글 톤 오류가 발생합니다. 이것은 변수를 사용하는 유일한 것으로 보이므로 많은 것을 얻으시기 바랍니다.

sends(_,priscilla,C), 
    C#\=rose. 
sends(carol,_,rose). 
sends(dick,_,sun). 

sends(_,_,landscape). 
sends(bob,rhonda,_). 
sends(edna,quincy,_). 

sends(_,simon,deer). 
sends(_,tina,_). 

가 이상한 또는 _로 대체 싱글 변수 잘못 보인다면, 그것은 당신이 논리를 놓치고있는 좋은 지표가있다 :에 위의 코드는 동일합니다.

sends(
    [alice,bob,carol,dick,edna], 
    [priscilla,rhonda,quincy,simon,tina], 
    [rose,heart,sun,landscape,deer]). 

프롤로그 마술 다른에 목록과 sends/3의 사용을 변환 할 것으로 예상하는 아무 이유도 없다 : 당신이 쓴대로 sends/3에 인수가이 호출에게 특히 동성애를 만드는, 전적으로 원자 것 같다 있습니다 마세요 원자로 호출. 네가 여기서 무슨 일이 일어날 지 모르겠다.

이러한 종류의 퍼즐은 Prolog에 대한 매우 일반적인 할당 문제입니다. 여기서 아카이브를 검색하십시오. 며칠 만에 여러 아카이브가 있습니다. 그러면 영감을 얻어야합니다.