【问题标题】:Retrieve Items in Prolog在 Prolog 中检索项目
【发布时间】:2020-11-19 14:55:06
【问题描述】:

假设我有这个知识库:

step('pancakes', 1, 'mix butter and sugar in a bowl', [butter, sugar], [bowl]). 
step('pancakes', 2, 'add eggs', [eggs], []). 
step('pancakes', 3, 'mix flour and baking powder', [flour, baking powder], []).

如何创建一个谓词来检索配方中所有步骤的所有成分?

那么,如果我要制定规则retrieveIngredients(X,Y). 并询问retrieveIngredients('pancakes',Y).,我将如何让它检索Y = ['butter','eggs','flour', 'baking powder'].

【问题讨论】:

    标签: list prolog


    【解决方案1】:

    只需使用findall/3

    retrieveIngredients(R,Y):-
        findall(A,step(R,_,_,A,_),Y).
    
    ?- retrieveIngredients('pancakes',Y).
    Y = [[butter, sugar], [eggs], [flour, baking_powder]]
    

    如果您想要扁平化列表,请添加对flatten/2 的调用。如果要删除重复项,请添加对 sort/2 的调用。请注意,在第三个step/5 事实中,您需要将baking powder 重写为baking_powder(没有空格)。

    【讨论】:

    • "...baking_powder(无空格)" 或用单引号括起来,'baking powder'
    • 非常感谢。您是否碰巧知道如何将它们添加到列表中而不是列表?所以不是[[黄油,糖],[鸡蛋],[面粉,烘焙粉]]它只是[黄油,糖,鸡蛋,面粉,烘焙粉]。提前致谢。
    • ^^ 他说:使用 flatten/2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多