我想构建这个解决方案: Prolog向我询问我的首选天气日期,并告诉我最佳匹配(不完全匹配,取决于学位)。
例如: 给出清单
Monday = [hot, sunny, 30] //30 degree
Tuesday = [hot, cloudy, 25]
Wednesday = [hot, sunny, 25]
问题1: 你喜欢热还是冷? 答案1:热门
问题2: 你喜欢晴天还是阴天? 答案2:晴天
问题3: 什么是最低温度? 答案3:22
- >现在Prolog应该回答这个问题:
度假的最佳日子是:
Monday = [hot, sunny, 30]
Wednesday = [hot, sunny, 25]
我的代码:
/* Ask all Questions */
go: -
q1,
q2,
q3.
/* Questions 1 */
q1: -
abolish(q1 / 1), /* clear clause, if q1 is used by user manually */
write('Do you like it hot or cold?'),
read(Q1),
asserta(q1(Q1)).
/*same for Q2 and Q3*/
最后我有这个:
q1(hot)
q2(sunny)
q3(22)
我可以将它与列表进行比较,所以我[热,晴,22](不知道为什么,但我可以这样做)
现在我真的不知道如何比较预先列表和我的答案。不知道比较温度。
有人可以帮我举个例子吗?我真的想了解Prolog,但我不知道如何处理这个问题。
答案 0 :(得分:1)
这是你可以做到的一种方式。我已将表示更改为类型日的事实而不是列表。
day(monday,hot,sunny,30).
day(tuesday,hot, cloudy,25).
day(wednesday,hot,sunny,25).
go:-
q1(X),
q2(Y),
q3(Z),
day(Day,X,Y,Z1),
Z1 >=Z, %this will back track and find other results if the first one found fails
print([Day,X,Y,Z1]). %this can be made more pretty if you wish.
q1(X):-
write('Do you like it hot or cold?'),
read(X).
q2(Y):- write('Do you like it sunny or cloudy?'),
read(Y).
q3(Z):- write('What is the minimum temperature?'),
read(Z).