gpt4 book ai didi

list - prolog中的配方功能

转载 作者:行者123 更新时间:2023-12-04 08:33:36 24 4
gpt4 key购买 nike

假设您将 prolog 中的食谱另存为

step(meal name, stepnumber, stepexaplanation, ingredients (list) , utensils). 
所以对于每个 meal name你有多个步骤和所有的解释来做这顿饭。那么你将如何创建一个调用 getStepText(X,Y,Z). 的函数? ?所以如果你问:
?- getStepText('pancakes',2,Y). 
它将返回膳食煎饼的第二步的文本。

最佳答案

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], []).

getStepText(Dish,Num,Text):-
step(Dish, Num, Text, _, _).

?- getStepText('pancakes',2,Y).
Y = 'add eggs' ;
false.
如果你使用 SWI Prolog,你可以使用 inbuild 谓词 findall/3找到您的所有步骤。不要忘记对它们进行排序。
getSteps(X,S):- 
findall(N,step(X,N,_,_,_),Bag),
sort(Bag,S).

?- getSteps('pancakes',Y).
Y = [1, 2, 3] ;
false.
如果您不想使用 findall/3你可以定义一个辅助谓词 getSteps/3 .此谓词假定所有步骤都是增量的,并从 1 开始。
getSteps(X,S):- 
getSteps(X,S,1).

getSteps(X, [], N):-
\+ step(X, N, _, _, _).
getSteps(X, [N|T], N):-
step(X, N, _, _, _),
NN is N+1,
getSteps(X, T, NN).

?- getSteps('pancakes',Y).
Y = [1, 2, 3] ;
false.
解释:你基本上运行一个计数器 N从 1(调用时设置)直到找不到当前编号的任何步骤 N .第一条规则测试结束:如果你没有当前 N的步骤“返回”空列表 [] .
否则,当您找到编号为 N 的步骤时, 尝试找到 steplist T为下一个值 NN (这是 N+1 )并且 - 一旦找到 - 放置 N在列表顶部 T .

关于list - prolog中的配方功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64908876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com