Prolog递归:提取想要的结果

时间:2014-03-28 00:53:43

标签: recursion prolog

我正在尝试在Prolog中创建一个谓词,它将另一个谓词应用于给定列表中的所有元素:

take_items(_,[],_).
take_items(Stock,[Item|BTail],_) :-
    take_item(Stock,Item,Updates),
    take_items(Updates,BTail,Updates).

仅供参考:我正在使用SWI-Prolog。 在跟踪模式下,我可以看到它确实做了我想要的,但随后开始回溯。以下是从基础案例到结束的跟踪输出:

   Call: (8) take_items([item(a, 2), item(b, 1)], [], [item(a, 2), item(b, 1)]) ? creep
   Exit: (8) take_items([item(a, 2), item(b, 1)], [], [item(a, 2), item(b, 1)]) ? creep
   Exit: (7) take_items([item(a, 2), item(b, 3)], [item(b, 2)], [item(a, 2), item(b, 3)]) ? creep
   Exit: (6) take_items([item(a, 3), item(b, 3)], [item(a, 1), item(b, 2)], _G1991) ? creep
true .

如何在致电X = [list, of, items]时将其输出take_items([first,list],[second,list],X).

1 个答案:

答案 0 :(得分:0)

这应该有效

take_items(_,[],[]).
take_items(Stock,[Item|BTail],[Update|Updates]) :-
    take_item(Stock,Item,Update),
    take_items(Updates,BTail,Updates).
  

我正在尝试在Prolog中创建一个谓词,它将另一个谓词应用于给定列表中的所有元素:

实际上,有maplist / 3可用

take_items(Stock,Items,Updates) :- maplist(take_item(Stock),Items,Updates).