2016-09-10 6 views
0

現在の大学生で、今学期にPrologを学ばなければなりません。私たちが実際に任務に入る前に、混乱して先に進んで学びたいと思っていました。Prolog Beginner - macbook

私は私のようなもので、私のmovie.plファイル持って、それが映画

に専用されているプログラムのためのプロジェクトを作成しています:

%acted_in(person,movie). 
acted_in(brad_pitt,babel). 
acted_in(cate_blanchette,babel). 
acted_in(sharlto_copley,district_9). 
acted_in(david_james,district_9). 

%directed(person,movie). 
directed(alejandro_inarritu,babel). 
directed(neill_blomkamp,district_9). 

%released(movie,year). 
released(babel,2006). 
released(district_9,2009). 

ものをちょうど私が持っているものの一部ですそこで。今私の先生は、私たちが先に進んで私たち自身のプログラムを試してみることを勧めて以来、私の先生はすでに物事をしている彼は先に進み、EXE =ムービーを変更するために必要なすべてのものを扱うmakefileを私たちに与えました。

私が紛失している部分はmain.plにあります。入れたい質問が複数あるとしますが、どうすれば追加できますか?以前のprint_query_falseの下に新しい質問のあるwritelnを追加するだけですか?

%main.pl 
:- [movie]. 
print_query_true(Q) :- 
    forall(Q, writeln(true:Q)). 

print_query_false(Q) :- 
    forall(\+ Q, writeln(false:Q)). 

main :- 
    nl 
    writeln("1. Did Leonardo DiCaprio act in Babel?"), 
    print_query_true(acted_in(leonardo_dicaprio,babel)), 
    print_query_false(acted_in(leonardo_dicaprio,babel)), 
    nl, 
    halt. 

最後の問題は、私がswiplを実行しようとするときに、プログラムが実行されてしまうことです。しかし、私は[映画]を入力します。それはちょうど真実を言い、それがコンパイルされたか何かのようなものであることを示さない。

+3

質問のタイトルを変更する必要があります。 "Prolog beginner"は質問を記述していないし、あなたのMacBookを使っているという事実(あなたのタイトルの意味であれば)は質問とは無関係に見える。 – lurker

答えて

0

私が紛失した部分は、main.plにあります。入れたい質問が複数あるとしますが、どうすれば追加できますか?以前のprint_query_falseの下に新しい質問のあるwritelnを追加するだけですか?

はい、例えば:

main :- 
    nl, 
    format("1. Did Leonardo DiCaprio act in Babel?"), 
    nl, 
    print_query_true(acted_in(leonardo_dicaprio,babel)), 
    print_query_false(acted_in(leonardo_dicaprio,babel)), 
    nl, 
    format("2. Was babel released in 2006?"), 
    nl, 
    print_query_true(released(babel, 2006)), 
    print_query_false(released(babel, 2006)), 
    nl, 
    format("3. Did anyone act in both Click and The Aviator?"), 
    nl, 
    print_query_true((acted_in(X, click), acted_in(X, the_aviator))), 
    print_query_false((acted_in(X, click), acted_in(X, the_aviator))), 
    nl, 
    format("4. Did sharlto_copley and david_james both act in district_9?"), 
    nl, 
    print_query_true((acted_in(sharlto_copley, district_9), acted_in(david_james, district_9))), 
    print_query_false((acted_in(sharlto_copley, district_9), acted_in(david_james, district_9))), 
    nl, 
    format("5. Was there any two movies released in 2006 and 2009?"), 
    nl, 
    print_query_true((released(X, 2006), released(Y, 2009))), 
    print_query_false((released(X, 2006), released(Y, 2009))), 
    nl, 
    format("6. What actors acted in babel or district 9?"), 
    nl, 
    print_query_true((acted_in(X, babel) ; acted_in(X, district_9))), 
    print_query_false((acted_in(X, babel) ; acted_in(X, district_9))), 
    nl, 
    format("6. What actors played in babel but not in district 9?"), 
    nl, 
    print_query_true((acted_in(X, babel), \+ acted_in(X, district_9))), 
    print_query_false((acted_in(X, babel), \+ acted_in(X, district_9))), 
    nl, 
    halt. 

私は、出力の適切なフォーマットされた文字列を取得するためにformatwritelnを変更しました。テストの実行:

?- [main]. 
% movie compiled 0.00 sec, 9 clauses 
% main compiled 0.00 sec, 15 clauses 
true. 

?- main. 

1. Did Leonardo DiCaprio act in Babel? 
false:acted_in(leonardo_dicaprio,babel) 

2. Was babel released in 2006? 
true:released(babel,2006) 

3. Did anyone act in both Click and The Aviator? 
false: (acted_in(_G1551,click),acted_in(_G1551,the_aviator)) 

4. Did sharlto_copley and david_james both act in district_9? 
true: (acted_in(sharlto_copley,district_9),acted_in(david_james,district_9)) 

5. Was there any two movies released in 2006 and 2009? 
true: (released(babel,2006),released(district_9,2009)) 

6. What actors acted in babel or district 9? 
true: (acted_in(brad_pitt,babel);acted_in(brad_pitt,district_9)) 
true: (acted_in(cate_blanchette,babel);acted_in(cate_blanchette,district_9)) 
true: (acted_in(sharlto_copley,babel);acted_in(sharlto_copley,district_9)) 
true: (acted_in(david_james,babel);acted_in(david_james,district_9)) 

6. What actors played in babel but not in district 9? 
true: (acted_in(brad_pitt,babel),\+acted_in(brad_pitt,district_9)) 
true: (acted_in(cate_blanchette,babel),\+acted_in(cate_blanchette,district_9)) 

SWI-Prologの素晴らしいドキュメントを持っているので、私はあなたがこれらを完全に理解するために使用述語をチェックすることをお勧め:

最後の問題がありますを通してプログラムをオンにします。しかし、私は[映画]を入力します。それはちょうど真実を言い、それがコンパイルされたか何かのようなものであることを示さない。

ソースファイルがある正しいディレクトリにいることを確認してください。 SW30-Prolog v6.6。4出力:

?- [movie]. 
% movie compiled 0.00 sec, 9 clauses 
true. 
+1

助けてくれてありがとうございました。今は2つの別々の映画で行動したキャラクターなど、2つの異なるものを比較したいと言っています。どうすればいい? 形式( "3.クリックし、アビエイターの両方に誰の行為をした?")、NL、 print_query_true((acted_in(X、クリックして)、(acted_in(X、the_aviator))))、 print_query_false(( acted_in(X、Click)、(acted_in(X、the_aviator)))))、 nl、 – c0212