Prolog - 将列表转换为术语列表

时间:2013-02-22 18:23:24

标签: prolog

我是Prolog的新手,有时无法绕过某些事情。我知道如何将列表转换为这种格式的术语:

listOfTerms(ListOfArgs,Name, ListOfResults)
listOfTerms([[1,2],[100,99],[5,11]],+,T).
T = +([1, 2], [100, 99], [5, 11]).

如何让它看起来像这样?

T = [1+2, 100+99, 5+11].

listOfTerms(Lst,F,[1+2, 100+99, 5+11]).
Lst = [[1, 2], [100, 99], [5, 11]],
F = + .

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

listOfTerms(ListOfArgs, Name, ListOfResults):-
    maplist(map(Name), ListOfArgs, ListOfResults).

map(Functor, Arg, Term):-
  Term=..[Functor|Arg].

使用=.. (univ)谓词从其参数构建术语或从术语中获取参数,并使用maplist将此转换应用于列表中的每对元素。

如果您想避免使用maplist,您只需定义一个递归过程:

listOfTerms([], _, []).
listOfTerms([Arg|ListOfArgs], Functor, [Term|ListOfTerms]):-
  Term=..[Functor|Arg],
  listOfTerms(ListOfArgs, Functor, ListOfTerms).