我是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 = + .
答案 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).