我目前有一个(键,值)对列表,我想提取所有键以在另一个函数中使用。
这样我就有一个名为
PairsList
我想
retractall(map(Key,_).
我努力了:
retractall(map(PairsList[(Key,_)],_).
但这只会引发语法错误。
任何帮助都会很棒!
收回它是一个强大的 Prolog 记忆工具,对动态信息管理很有用,但重要的是不要滥用它。在你的问题中,似乎无关紧要。如果您有对 (Key,Value) 的列表,那么
如果你可以使用 SWI-Prolog,有这个有趣的库(pairs)。而不是(A,B)
uses A-B
,但对于表示更改,您会获得很多。使用该库,您将使用的内置函数是pairs_keys (Pairs, Keys)
没有任何库,函数(但它是一个关系,而不是函数)很容易用纯 Prolog 编写。
键([(键,_)|对],[键|键]):-键(对,键)。 键([],[])。
我认为最好的方法是使用库中的 maplist(apply)和一个非常简单的谓词:
键(对,键):- maplist(键,对,键)。 键((K,_),K)。
请注意,这样我们可以重用从“实际”对表示中抽象出来的逻辑:只需添加
键(K - _,K)。处理首选的 Prolog 方式
如果你使用 SWI-Prolog 和 module(lambda),你可以写
maplist(\X^Y^(X = (Y,_)), L, L1),
例如这段代码:
:- use_module(library(lambda)).
t(L, L1) :-
maplist(\X^Y^(X = (Y,_)), L, L1).
给
?- t([(1,a), (2,b), (3,c)], L).
L = [1,2,3].