【发布时间】:2014-03-28 00:53:42
【问题描述】:
我正在尝试在 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 .
如何在调用take_items([first,list],[second,list],X).时输出X = [list, of, items]?
【问题讨论】:
-
第三个参数有什么意义,如果两个子句都忽略它?
-
如果这看起来很愚蠢,请原谅我。我是 Prolog 的新手。第三个参数是所需结果的转储位置。