2016-09-10 173 views
0

當前大學生在這裏,並且必須在本學期學習Prolog。想要在我們真正進入任何任務之前先弄到手,然後學習,然後我失去了大聲笑。Prolog初學者--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). 

這些都只是一些那些我有在那裏。現在我的老師已經有了一些東西,因爲他建議我們繼續前進並嘗試我們自己的程序。他繼續向我們提供了一個makefile,該文件應該可以用於更改EXE =電影所需的一切。

我失去的部分在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初學者」沒有描述這個問題,而且你使用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. 

我改變writelnformat得到輸出正確格式的字符串。測試運行:

?- [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的有真棒文件,所以我建議你檢查了,能夠完全理解他們的謂詞:

最後一個問題我已經是當我嘗試運行swipl它去通過並打開程序。但是當我輸入[電影]。它只是說實話,並沒有表明這是說編譯或任何類型的。

確保您位於擁有源文件的正確目錄中。

SWI-Prolog v6.6。4輸出:

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

非常感謝你的幫助。現在說我想比較兩種不同的東西,比如一個角色在兩部單獨的電影中演出。我將如何做到這一點? 格式( 「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