2015-01-24 5 views
2

페어 데이터는 사용하기가 좋지만 선물하기가 어렵습니다. 나는 열쇠의 인쇄를 완수하는 방법을 묻는다. & 값들이 즐겁게 정리되어있다. 쌍 값의 앞자리 0은 도움이됩니다. 샘플 데이터 :프롤로그는 페어 인쇄 형식을 지정하는 방법은 무엇입니까?

[1-7,2-43,3-56,4-87,5-110,6-80,7-15] 
    [1-1837,2-1873,3-1911,4-1946,5-1975,6-1994,7-2005] 

SWI format_predicate; 그러나 할 수 없었다. 그런 다음 인라인을 실험 해 보았습니다. 형식 ('~ n ~ w ~ w ~ w ~ n', [ '쌍 :', 1-246,1-2, 'EOL']).

최종 결과는 형태 KK-VVVV의 쌍을 처리해야

01-0007 02-0043 03-0056 04-0087 05-0110 06-0080 07-0015 398 People 7 Gens. 
01-1837 02-1873 03-1911 04-1946 05-1975 06-1994 07-2005 Spanning 168 Years 

최종 답변 :

fpair(A-B) :- format('~`0t~d~2|-~`0t~d~7| ', [A,B]) 
applist(_,[]). applist(P,[X|L]) :- Q =.. [P,X],call(Q),applist(P,L).  
dojustone(X):- format('[email protected] ',[fpair(X)]).  
dolist(X):- applist(dolist,X). 
+0

거의 다 왔으므로 답이 형식 문제를 해결했습니다. 이제는 쌍의 목록에 적용하는 방법을 알아 내야합니다. 문제는 Prolog 문제입니다.하지만 여전히 중첩을 혼란스럽게합니다. 되돌아 보면 더 나은 문제 설명은 가변 요소 List를 포함했을 것입니다. N 쌍의 L 개, 각 쌍은 2 자리 숫자 키로 형식화되며 4 자리 숫자 값입니다. @은 솔루션의 핵심이었습니다. fpair (A-B) : - 형식 ('~'0t ~ d ~ 2 | ~'0t ~ d ~ 7 | ', [A, B]). gets : 01 0007 02 0043 03 0056이 표현식은 작동하지 않습니다 : format ('~ @', maplist (fpair, [(1-246), (1-2), (3-2015)]) mardown next. – softbrass

+0

출력을 원하는대로 보여줄 수 있습니까? – lurker

+0

은 3 개의 정의로 구성되어 있습니다. 목록의 형식화 된 긴 목록을 만들 수 있습니다 : applist (_, []). applist (P, [X | L] (X) : - 형식 ('~ @', [fpair (X)]) dolist (X) : - Q = .. [P, X], call (Q), applist (P, L)) : - applist (dolist, X) – softbrass

답변

2

을 나는 복잡한 형식에 대한 @ 지정자를 사용, 그것은 출력 특정 조건에 있습니다. 인스턴스

?- format('[email protected][email protected]~n~w~n', ['Pairs: ',fpair(1-246),fpair(1-2), ' EOL']). 

들어 fpair/1 출력을 캡처 @ 호출, 사용자의 응답 술어이다.

고정 폭 필드를 얻으려면 두 개의 지정자가 함께 작동하는 탭 지정을 사용합니다. 마지막으로, 나는 사전을 최대 자릿수를 모른 채

fpair(A-B) :- 
    format('~`0t~d~6| ~`0t~d~12|', [A,B]). 

을 사용, 0과 접두사로, 우리는 추측을 사용해야합니다. 나는 여기서 6을 사용했다.

+1

형식 제어 시퀀스'~ \''는 SWI Prolog에 특정한 것으로 생각합니다. 적어도 GNU Prolog에는 없습니다. OP가 사용하는 Prolog의 버전이 명확하지 않기 때문에 주목할 가치가 있습니다. – lurker

관련 문제