我试图做一些看似非常简单的事情,但我无法理解。我想在Prolog中根据给定的谓词分割一个列表,并对其中的对象进行迭代。例如:
object_properties(jackass, [comedy, -australian]).object_properties(the_godfather, [drama, crime, -character_batman]).
我如何迭代这些列表并将其打印到屏幕上?更具体地说,我需要询问用户该对象是否具有该属性。如果他们回答是,则继续到列表中的下一项;如果他们回答不是,则继续到下一个对象。
任何帮助将不胜感激。
回答:
像这样的代码可以帮助你开始:
object_properties :- object_properties(O, Ps), query_user_loop(O, Ps).query_user_loop(_, []).query_user_loop(O, [P|Ps]) :- write([object, O, has, P, ?]), read(Answer), ( Answer == yes -> query_user_loop(O, Ps) ).object_properties(jackass, [comedy, -australian]).object_properties(the_godfather, [drama, crime, -character_batman]).
这可以实现简单的交互(请注意每个答案后的点):
9 ?- object_properties.[object,jackass,has,comedy,?]yes.[object,jackass,has,-australian,?]no.[object,the_godfather,has,drama,?]yes.[object,the_godfather,has,crime,?]yes.[object,the_godfather,has,-character_batman,?]yes.true