gpt4 book ai didi

prolog - 从列表中查询事实

转载 作者:行者123 更新时间:2023-12-04 06:33:53 25 4
gpt4 key购买 nike

我是 prolog 的新手,我想解决这个问题。假设我有一个 list 说List[a,b,c]现在我有一些事实说likes(a,banana).

likes(b,orange).

likes(c,apple).

likes(d,grapes).

所以如果我查询
?- my_functor(List,X).

X=[banana,orange,apple].

谢谢。

最佳答案

考虑:

?- List=[a,b,c], findall(X, (member(Y, List), likes(Y, X)), Xs).
List = [a, b, c],
Xs = [banana, orange, apple].

解释:

findall/3 被称为“所有解决方案”谓词,它试图找到与第一个参数(这里是变量 X )统一的所有可能值到秒参数(这里是连词 (member(Y, List), likes(Y, X)) )的解决方案,并放置 X 的所有值到一个列表中,绑定(bind)到第三个参数(这里是 Xs )。

请注意,生成 X 值的内部表达式是一个回溯的语句,为 X 提供不同的赋值。 :
?- member(Y, [a,b,c]), likes(Y, X).
Y = a,
X = banana ;
Y = b,
X = orange ;
Y = c,
X = apple ;
false.

用 SWI-Prolog 测试。

请注意 findall/3 also appears in GNU Prolog在大多数其他实现中。

关于prolog - 从列表中查询事实,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071782/

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