我正在尝试在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).
?
答案 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).