把关系变成事实

时间:2019-01-24 14:46:21

标签: prolog

我想在序言中问一个非常基本的问题。我有一个看起来像[[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])].

如何实施?

1 个答案:

答案 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