繁体   English   中英

prolog扩展谓词以迭代多个结果,组合/解析结果集

[英]prolog expanding predicate to iterate for multiple results, combining / resolving result sets

我有一个谓词“ lookupOptions”,它逐个返回一些列表(菜单)。

我正在尝试使其满足多个输入的情况。 通过阅读“ list_places”列表的标题,我可以按如下方式返回一组选项。

find_options(Restaurant,Town,Menu) :- lookupOptions(Restaurant,H,Menu), list_places(Town,[H|T])

但是,我无法使其迭代。

我尝试了很多事情,这是迄今为止我最大的努力。

a)标准的迭代,但无法解决...

doStuff(X,[],_).
doStuff(Restaurant,[H|T],_):-  lookupOptions(Resturant,H,_), doStuff(Restaurant,T,_).
find_options(Restaurant,Town,Menu) :- doStuff(Restaurant,[H|T],Menu), list_places(Town,[H|T]).

b)扩展目标谓词...

find_options(_,Town,[H|T],_)
find_options(Restaurant,Town,Menu) :- find_options(Restaurant,Town,[],Menu).
find_options(Restaurant,Town,X,Menu) :- list_places(Town,X).
find_options(Restaurant,Town,[H|T],Menu) :- lookupOptions(Restaurant,[H],Menu), find_options(Restaurant,Town,T,Menu).

这些工作都可以吗? 模式是否正确写入。 还是是否有适当的削减措施?

任何帮助最感激...

不清楚您要迭代什么 Prolog使用回溯来检查所有替代方案,然后,如果您正在寻找某种替代方案,则应该开始回溯,或者使用所有解决方案系列。

现在我认为您只想声明可能会有更多的find_options(Restaurant,Town,Menu) 然后尝试用以下方法替换头球比赛[H|T]

find_options(Restaurant,Town,Menu) :-
   lookupOptions(Restaurant,H,Menu),
   list_places(Town, Places),
   member(H, Places).

BTW T是您原始规则中的一个单例。 这可能暗示需要将其概括。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM