prolog - 获取 Prolog 类型的所有元素

标签 prolog

我声明了一种对象类型,如下所示:

type([coffee, tea, lemonade, water, coke, beer]: drink).

如何获取 drink 类型的所有对象的列表?

最佳答案

您可以使用统一,例如:

type(<b>L</b> : drink).

这会将 L 与该列表统一起来,例如:

?- type(L: drink).
L = [coffee, tea, lemonade, water, coke, beer].

话虽如此,这里使用冒号(:)并不常见,通常使用不同的参数。此外,列表实际上也不是很常见,因为您因此无法轻松检查的类型。

更惯用的写法是:

type(coffee, drink).
type(tea, drink).
type(lemonade, drink).
type(water, drink).
type(coke, drink).
type(beer, drink).

例如,我们可以查询 drink 类型的元素:

?- type(D, drink).
D = coffee ;
D = tea ;
D = lemonade ;
D = water ;
D = coke ;
D = beer.

或者查询的类型是什么:

?- type(water, T).
T = drink.

检查报纸可乐是否是饮料:

?- type(newspaper, drink).
false.

?- type(coke, drink).
true.

并枚举所有项目及其类型:

?- type(X, T).
X = coffee,
T = drink ;
X = tea,
T = drink ;
X = lemonade,
T = drink ;
X = water,
T = drink ;
X = coke,
T = drink ;
X = beer,
T = drink.

然后您可以使用 findall/3 [swi-doc] 创建一个列表谓词:

?- findall(D, type(D, drink), Ds).
Ds = [coffee, tea, lemonade, water, coke, beer].

关于prolog - 获取 Prolog 类型的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56684163/

相关文章:

prolog - 如何改进这段在列表中查找特定数字的代码?

prolog - Prolog递归过程解释

prolog - 关于混合 Prolog 协程(freeze/2,when/2)和 DCG

prolog - 有没有办法让 swi prolog 打印其当前工作的推理树?

xml - SwiProlog中的xpath查询中的运算符(operator)预期错误

prolog - 是否应编写文本处理DCG来处理代码或字符?或两者?

list - 检查列表是否有序

Prolog:为什么我最终会得到带有匿名变量的列表

prolog - Forall/3 手工

java - JPL textToTerm 只产生匿名变量