1

我是 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 = + .
4

1 回答 1

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).
于 2013-02-22T18:33:47.073 回答