我想在序言中问一个非常基本的问题。我有一个看起来像[[a_1,a],[a_2,c],[a_3,e,f]]
的列表。我想创建一个获取该列表并将关系添加到每个子列表的中缀的关系。例如,我想插入x
作为后缀:x([[a_1,a]),x([a_2,c]),x([a_3,e,f]])
。目的是使关系成为事实。我试图使用findall
,但没有成功。
示例:
turn([[a_1,a],[a_2,c],[a_3,e,f]]).
输出:
[x([a_1,a]),x([a_2,c]),x([a_3,e,f])].
如何实施?
答案 0 :(得分:2)
[x([a])]
本身不是事实。这只是Prolog term 的另一种形式。 事实是一个在数据库中断言的术语,不表示谓词,可以查询。听起来您不想转换为“事实”,但您只想转换为其他术语表。
在这种情况下,使用maplist
很容易:
turn_item(X, x(X)).
turn(TermList, NewTermList) :-
maplist(turn_item, TermList, NewTermList).
然后:
| ?- turn([[a_1,a],[a_2,c],[a_3,e,f]], L).
L = [x([a_1,a]),x([a_2,c]),x([a_3,e,f])]
yes