我很难找到从序言键值对访问值的方法。
gas-[2, 3, 1, 1, 3]
以上是我的一对例子,加油是关键,清单是价值。之所以使用这种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].