Prolog如何指定对打印格式
How do I Prolog specify pair printing format
配对数据很好用,但我发现很难呈现。我问如何完成打印一组向量,以便键和值愉快地排列。对值中的前导零会有所帮助。示例数据:
[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', ['Pairs: ',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('~@ ',[fpair(X)]).
dolist(X):- applist(dolist,X).
我对复杂格式使用 @ 说明符,它允许输出特定术语。例如
?- format('~s~n~@~n~@~n~w~n', ['Pairs: ',fpair(1-246),fpair(1-2), ' EOL']).
也就是说,fpair/1是一个用户谓词,由@调用,捕获它的输出。
为了获得固定宽度的字段,我使用制表符规范,它由 两个 说明符共同构建而成。最后,要以 0 为前缀,我会使用
fpair(A-B) :-
format('~`0t~d~6| ~`0t~d~12|', [A,B]).
在事先不知道最大位数的情况下,我们必须使用猜测。我这里用了6个
配对数据很好用,但我发现很难呈现。我问如何完成打印一组向量,以便键和值愉快地排列。对值中的前导零会有所帮助。示例数据:
[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', ['Pairs: ',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('~@ ',[fpair(X)]).
dolist(X):- applist(dolist,X).
我对复杂格式使用 @ 说明符,它允许输出特定术语。例如
?- format('~s~n~@~n~@~n~w~n', ['Pairs: ',fpair(1-246),fpair(1-2), ' EOL']).
也就是说,fpair/1是一个用户谓词,由@调用,捕获它的输出。
为了获得固定宽度的字段,我使用制表符规范,它由 两个 说明符共同构建而成。最后,要以 0 为前缀,我会使用
fpair(A-B) :-
format('~`0t~d~6| ~`0t~d~12|', [A,B]).
在事先不知道最大位数的情况下,我们必须使用猜测。我这里用了6个