我需要定义一个解析给定列表的谓词,如下所示:
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] ).
这可能是什么样的?
答案 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).