如何从 Prolog 中的键值对中获取值

How to get value from key-value pair in Prolog

我很难找到从序言键值对访问值的方法。

   gas-[2, 3, 1, 1, 3]

以上是我的pair的例子,gas是key,list是value。我使用这种 A-B 格式的原因是因为 术语 -(A, B) 表示元素 A 和 B 对。在 Prolog 中,(-)/2 被定义为中缀运算符。因此,该术语可以等效地写为 A-B. 来自 this.

我想通过'gas'获取列表。

这是在 Windows 10

上使用 SWI-Prolog(线程,64 位,版本 8.1.24)完成的
?- use_module(library(pairs)).
true.

首先是一个仅从键和值构造对的示例。

?- pairs_keys_values(Pairs,[gas],[[2,3,1,1,3]]).
Pairs = [gas-[2, 3, 1, 1, 3]].

既然键值对的预期语法是已知的,

从给定键的对中提取值。

?- pairs_keys_values([gas-[2,3,1,1,3]],[gas],Value).
Value = [[2, 3, 1, 1, 3]].

编辑

在深入研究之后,也许您想要的不是 键值对,而是关联列表 参见:图书馆(协会):Association lists

?- list_to_assoc([a-1,b-2,c-3],Assoc),get_assoc(b,Assoc,Value).
Assoc = t(b, 2, -, t(a, 1, -, t, t), t(c, 3, -, t, t)),
Value = 2.

使用你的例子gas-[2,3,1,1,3]

?- list_to_assoc([a-1,gas-[2,3,1,1,3],c-3],Assoc),get_assoc(gas,Assoc,Value).
Assoc = t(c, 3, -, t(a, 1, -, t, t), t(gas, [2, 3, 1, 1, 3], -, t, t)),
Value = [2, 3, 1, 1, 3].