2016-07-29 1 views
1

저는 현재 Prolog의 초보자이며 연산자 오류가 발생했습니다. 컴파일러에 따르면, do 문으로 뭔가를해야만한다. 모든 지침은 매우 감사 할 것입니다. 고맙습니다.구문 오류 : 연산자가 필요합니다 (do 문)

:-use_module(library(clpfd)). 
:-use_module(library(lists)). 

go :- 
    Mary = 1, 
    John = 2, 
    Jim = 3, 

    Persons = [Mary, John, Jim], 

    Jobs = [Gardener, Veteriarian, Dishwasher, Nurse, MathTeacher, BiologyTutor], 
    domain(Jobs,1,3), 

    % This means that each person holds two jobs 
    global_cardinality(Jobs,[1-2,2-2,3-2]), 

    %nurse went out with the veteriarian last night 
    Nurse \= Veteriarian, 

    %mary is friends with the biology tutor but she stayed home last night 
    Mary \= BiologyTeacher, Mary \= Nurse, Mary \= Veteriarian, 

    %jim likes animals but doesn't do good in math and dropped out of college 
    Veteriarian = Jim, Jim \= MathTeacher, Jim \= BiologyTutor, Jim \= Nurse, 

    %jim doen't know the gardener 
    Gardener \= Jim, Mary = Gardener, 

    %Mary and the biology teacher used to be married 
    BiologyTeacher = John, 

    %search 
    labeling([],Jobs), 

    %output 
    write(Jobs),n1, 
    PersonsStr = ['Mary', 'John', 'Jim'], 
    JobStr = ['Gardener', 'Veteriarian', 'Dishwasher', 'Nurse', 'MathTeacher', 'BiologyTutor'], 

    ( foreach(J, Jobs), 
     foreach(JS, JobStr), 
     param(PersonsStr, Persons) do 
     (foreach(P, Persons), 
      foreach(PS, PersonsStr), 
      param(J,JS) do 
      P == J -> format('~w\t~w'[JS,PS]) ; 
      true 
     ), 
      n1 
    ), 

    fd_statistics. 
+2

출력 코드는 [이 튜토리얼] (http://eclipseclp.org/doc/tutorial/tutorial025.html)에 표시된 ECLiPSe 프로그래밍 언어를 사용합니다. 이러한 논리 루프는 SWI-Prolog에서 지원되지 않습니다. – SND

+2

프로그램이 작성되었습니다! 'n1'을 쓰지 만'nl'이어야합니다. 당신은'\ ='을 쓰지만'# \ ='이어야합니다. SWI에서 실행하려면'domain (Jobs, 1,3)'대신'Jobs ins 1..3'을 작성해야하며, 이미 지시 한대로'do'를 처리해야합니다. – false

+2

어쨌든 더 작은 예제부터 시작하십시오! – false

답변

1

코드는 ECLiPSe에서 원래 구성하고 최근에도 SICStus Prolog에있는 논리적 루프를 사용합니다. 에서 사용할 수 SWI-Prolog에 대한 (명백한 작업 진행) 구현이있어 :

https://github.com/JanWielemaker/logical-loops

코드 전에 (이 하나의 프롤로그 파일입니다) 먼저로드 시도하고 당신이 그것을 실행할 수 있는지 확인합니다.