Prolog-确定对象日期和状态的规则。

Prolog-确定对象日期和状态的规则。,prolog,compare,conditional,rule,Prolog,Compare,Conditional,Rule,首先,这是我到目前为止的代码: number_book(111, brave_new_world). number_book(222, lord_of_the_flies). number_book(333, fight_club). number_book(444, wind_in_the_willows). number_book(555, the_hobbit). author_book(huxley_aldus, brave_new_world). author_book(golding

首先,这是我到目前为止的代码:

number_book(111, brave_new_world).
number_book(222, lord_of_the_flies).
number_book(333, fight_club).
number_book(444, wind_in_the_willows).
number_book(555, the_hobbit).
author_book(huxley_aldus, brave_new_world).
author_book(golding_william, lord_of_the_flies).
author_book(palahniuk_chuck, fight_club).
author_book(grahame_kenneth, wind_in_the_willows).
author_book(tolkien_jrr, the_hobbit).
author_fore_sur(huxley_aldus, aldus, huxley).
author_fore_sur(golding_william, william, golding).
author_fore_sur(palahniuk_chuck, chuck, palahniuk).
author_fore_sur(grahame_kenneth, kenneth, grahame).
author_fore_sur(tolkien_jrr, jrr, tolkien).

id_sur_fore(1202, smith, john).
id_sur_fore(1332, thompson, kevin).
id_sur_fore(4556, anderson, edward).
house_post_id(5, dh1_3pr, 1202).
house_post_id(123, ne3_4ty, 1332).
house_post_id(45, dh3_6kl, 4556).

borrowed_id(333, 1202).
borrowed_id(222, 1332).
borrowed_id(555, 4556).

book_out(333,11_06_2014).
book_out(222,15_06_2014).
book_out(555,17_06_2014).
book_in(333, 19_06_2014).
book_in(222, 26_07_2014).
book_in(555, 01_07_2014).

due_date(D) :- book_in(N, D1), D @< D1.

我想做的是确定哪些书是借出的,借给谁,以及书是否过期。由于缺乏使用Prolog的经验,我还不知道从哪里开始,任何帮助都将不胜感激

我建议您使用dateYear、Month、Day来表示日期。然后你可以使用@首先,你应该为日期使用不同的表示法。如果您打算按字母顺序比较以“日、月、年”格式表示日期的原子,则会得到错误的结果,例如?-“01\u 01\u 2014”<“31\u 01\u 1900”。这是真的。改为使用dateYear、Month、Day。是否有方法计算函子中book_due和book_之间的天数?到目前为止,我没有任何结果:言过其实1,N:-book_inN1,D1,book_due1,D2,N=D1-D2我想你必须自己做算术题。你应该在上面另外贴一个问题。注意,谢谢你的建议,它现在运行得很顺利。
on_loan(D, Title):-
    book_out(Id, D1), D1 @=< D,
    book_in(Id, D2), D @< D2,
    number_book(Id, Title).
all_on_loan(D, All) :- findall(Title, on_loan(D, Title), All).
all_on_loan_today(All) :- date(D), all_on_loan(D, All).