Lambda 在Prolog Pairs列表中查找键
我目前有一个(键,值)对的列表,我想取出所有的键用于另一个函数 这样我就有了一个叫做Lambda 在Prolog Pairs列表中查找键,lambda,prolog,Lambda,Prolog,我目前有一个(键,值)对的列表,我想取出所有的键用于另一个函数 这样我就有了一个叫做 PairsList 我想 retractall(map(Key,_). 我试过: retractall(map(PairsList[(Key,_)],_). 但这只是抛出了一个语法错误 任何帮助都会很棒 如果使用SWI Prolog和模块(lambda),则可以编写 maplist(\X^Y^(X = (Y,_)), L, L1), 例如,此代码: :- use_module(library(lamb
PairsList
我想
retractall(map(Key,_).
我试过:
retractall(map(PairsList[(Key,_)],_).
但这只是抛出了一个语法错误
任何帮助都会很棒 如果使用SWI Prolog和模块(lambda),则可以编写
maplist(\X^Y^(X = (Y,_)), L, L1),
例如,此代码:
:- use_module(library(lambda)).
t(L, L1) :-
maplist(\X^Y^(X = (Y,_)), L, L1).
给予
它是一个强大的Prolog内存工具,对于动态信息管理非常有用,但重要的是不要滥用它。在你的问题中,这似乎无关紧要。如果您有一个对(键、值)列表,那么
- 如果您可以使用SWI Prolog,那么有一个有趣的库()。
而不是
使用(A,B)
,但是对于表示形式的更改,您获得了很多。对于该库,您将使用的内置项是(对、键)A-B
- 没有任何库,函数(但它是一个关系,不是函数)很容易用纯Prolog编写 keys([(Key,_)|Pairs], [Key|Keys]) :- keys(Pairs, Keys). keys([], []). 键([(键,对],[键]):-键(对,键)。 键([],[])。
- 我认为最好的方法是使用库()中的maplist和一个非常简单的谓词: keys(Pairs, Keys) :- maplist(key, Pairs, Keys). key((K, _), K). 键(对,键):-maplist(键,对,键)。 键((K,uu),K)。 注意,通过这种方式,我们可以重用从“实际”对表示中提取的逻辑:只需添加 key(K - _, K). 键(K-UK)。以首选的Prolog方式处理