首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从知识库中检索约束列表

从知识库中检索约束列表
EN

Stack Overflow用户
提问于 2020-11-20 17:00:04
回答 1查看 68关注 0票数 1
代码语言:javascript
运行
复制
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 bakingpowder', [flour, baking_powder], []).

steps(R,Y,P):-
     findall(A,step(R,_,A,_,P),Z),
     distinctSteps(Z,Y).

distinctSteps(Z,Y) :-
     list_to_set(Z,Y).

所以我有这个知识库和一个规则,它应该用我给出的作为参数的特定工具来检索步骤。例如,steps('pancakes', bowl, I).应该返回I = ['mix butter and sugar in a bowl']。然而,它只给了false。如果我将它简化为R,Y,它可以工作,但这不是我想要的。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-20 20:29:57

所以这可能是一个误解。你的配料术语是原子(bowl)还是列表([bowl])?我之所以问这个问题,是因为这是我想出来的知识库,但我不确定这是否符合您的要求。所以我假设你用的是餐具清单。请注意,以下知识库与您的知识库不同(因此问题也不同):

代码语言:javascript
运行
复制
step(pancakes, 1, 'mix butter and sugar', [butter, sugar], [bowl, mixer]). 
step(pancakes, 2, 'add eggs', [eggs], []). 
step(pancakes, 3, 'mix flour and bakingpowder', [flour, bakingpowder], [bowl]). 

hasUtensil(Dish, Step, Instr, Ingr, Utensil):-
    step(Dish, Step, Instr, Ingr, U),
    member(Utensil, U).

stepsUtensil(Dish,Utensil,Instructs):-
    findall(A, hasUtensil(Dish,_,A,_,Utensil), Instructs).

?- stepsUtensil(pancakes, bowl, I).
I = ['mix butter and sugar', 'mix flour and bakingpowder']

stepsUtensil/5不会简单地从step/5的工具列表中删除所有工具。它只需要询问工具列表中的所有成员即可。例如,第一步:

代码语言:javascript
运行
复制
?- hasUtensil(_,1,_,_,U).
U = bowl ;
U = mixer ;
false.

如果您要将hasUtensil/5作为事实编写,它将如下所示:

代码语言:javascript
运行
复制
step(pancakes, 1, 'mix butter and sugar', [butter, sugar], bowl). 
step(pancakes, 1, 'mix butter and sugar', [butter, sugar], mixer). 
step(pancakes, 3, 'mix flour and bakingpowder', [flour, bakingpowder], bowl). 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64926530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档