2017-10-15 25 views
1

目前試圖建立在序言圖書館推薦系統爲大專分配和是很新的Prolog的,我完全迷失了方向,並想知道如果我能有一些這方面給我解釋詳細細節。 這裏是我的事實和規則目前:問題在序言中運行的查詢與列表和謂語

book(after_dark, haruki_murakami,fiction,182). 
book(python, charlie, revision, 560). 
book(nt_bible, sams, reference, 480). 
book(monty_python, cleese, comedy, 300). 

buildLibrary(Lib) :- findall(book(Title, Author, Genre, Size), book(Title, Author, 
Genre, Size), Lib). 

holiday(B,L) :- //this should take the list formed in buildLibrary along with a variable that represents a book 
       //and is true if and only if its genre is comedy or fiction and less than 400 pages 

預期輸入: buildLibrary(L) holidays(book(after_dark,haruki_murakami,fiction,182),L)

理想情況下這應該因爲它符合概括

要求我如何才能返回true有關設置假期規則?一旦我知道如何做到這一點,我覺得我可以讓它工作,我已經嘗試過多種方法,並且他們都已經在SWL prolog中返回錯誤,再次感謝您的幫助!

回答

2

如果我正確理解你的實現,那麼你可以這樣做:

holiday(B,L) :- buildLibrary(Lib), check(L,B). 


check(book(X, Y, Genre, Size),[book(X, Y, Genre, Size)|_]):- 
        (Genre = comedy ;Genre = fiction), Size < 400. 
check(B,[book(_, _, Genre, Size)|T]):- 
        dif(Genre,comedy),dif(Genre,fiction), check(B,T). 
+0

那麼在分配我的演講中指出: 「你的假期,修訂,文學和休閒謂詞應該採取2個參數;一個 「查詢」一書(與未知數(變量)的標題和作者)和庫(的 書籍的列表)。這將通過列表和計算結果爲真,如果這本書在 列表頭是適當的書的類型(在這種情況下,它將圖書館書的書名和作者 與「查詢」書相匹配) 「。 但是,我不知道如何代表「查詢」的規則。 –

+0

你可以發佈一個關於假期謂詞的示例輸入期望輸出嗎? – coder

+0

更新我的問題,希望這使得它更清晰 –