如何遍历列表以创建特定的其他列表

时间:2014-03-06 09:17:05

标签: prolog

我需要定义一个解析给定列表的谓词,如下所示:

change([10,-,6], List). //send it this
List = [item(num, 10), item(minus, _), item(num, 6)] //returns exactly this.

我不知道如何检查列表中的某个项目是否为“num”,或者是否为减号或者是什么......

change([], _).
change([H|Rest], List) :- "Do something with atom here?" , transform(Rest, [item(Atom, H) | List] ). 

这可能是什么样的?

1 个答案:

答案 0 :(得分:1)

因为您要对每个列表元素应用转换,所以您的更改/ 2应为

change([], []). 
change([H|Rest], [Q|List]) :- qualify(H,Q) change(Rest, List]). 

qualify(N, item(num, N)) :- number(N), !.
qualify(-, item(minus, _)) :- !.
qualify(A, item(atom, A)).  % you left unspecified, assume everything else is an atom...

更改/ 2它实际上是一个地图列表,可以写成:

change(I, O) :- maplist(qualify, I, O).