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

问题描述 投票:1回答:1

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

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

以上是我的一对例子,加油是关键,清单是价值。之所以使用这种A-B格式,是因为术语-(A,B)表示元素对A和B。在Prolog中,(-)/ 2被定义为中缀运算符。因此,该术语可以等效地写为A-B。来自this

我想仅通过'gas'获得列表。

prolog key-value keyvaluepair
1个回答
3
投票

这是在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].
© www.soinside.com 2019 - 2024. All rights reserved.