2013-02-22 4 views
1

저는 프롤로그를 처음 접했고 때로는 특정 일로 머리를 감쌀 수도 없습니다. 나는이 형식 측면으로 목록을 변환하는 방법을 알고프롤로그 - 목록을 용어 목록으로 변환합니다.

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

가 어떻게 그것을 같이해야합니까? 자신의 주장이나 용어에서 인수를 얻을 수있는 조건을 구축

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

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

사용 =.. (univ) 술어를, 각이 변환을 적용 할 maplist를 사용

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

귀하의 질문이 명확하지 않다. 귀하의 첫 번째 예제는 T가 어디에도 사용되지 않지만 결과에는 나타납니다. – liori

+0

죄송합니다. 나는 그것을 고쳤다. – user1834372

답변

1

나는 같은 것을 할 것 목록의 요소 쌍. 당신이 maplist 사용하지 않도록하려면

, 당신은 단지 재귀 프로 시저를 정의 할 수 있습니다

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

감사합니다. 이걸 재귀 적으로 그리고 매플리스트없이 할 수있는 방법이 있습니까? – user1834372

+0

@ user1834372 : 물론 편집 된 답변을 참조하십시오. 필요한 것은 두 목록의 요소에 대해 단일 술어를 적용하는 것입니다. – gusbro

관련 문제