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].

predicate を使用=.. (univ)して、引数から項を構築するか、項から引数を取得し、 を使用maplistして、この変換をリストの要素の各ペアに適用します。

の使用を避けたい場合maplistは、再帰的な手順を定義できます。

listOfTerms([], _, []).
listOfTerms([Arg|ListOfArgs], Functor, [Term|ListOfTerms]):-
  Term=..[Functor|Arg],
  listOfTerms(ListOfArgs, Functor, ListOfTerms).
于 2013-02-22T18:33:47.073 に答える