2016-07-29 7 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

あなたのコードの前に(それが単一のPrologファイルです)最初にそれをロードしてみて、あなたがそれを実行できるかどうかを確認します。

関連する問題