我如何Prolog指定对打印格式

时间:2015-01-24 20:38:33

标签: prolog

配对数据非常适合使用,但我发现很难呈现。我问如何完成打印一组矢量,以便键和&价值观令人愉快。对价值中的前导零会有所帮助。样本数据:

  [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).

1 个答案:

答案 0 :(得分:2)

我对复杂格式使用@说明符,它允许输出特定的术语。例如

?- 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个。