Prolog - 格式化网格的输出 table

Prolog - Format the output of a grid table

我想打印一个 9x9 网格,指示行数和列数,我希望元素左对齐。 像这样:

> L\C | 1 | 2 | 3 | ... | 9 |
> --------------------------- 
> 1   | a | b | a | ... | b |
> --------------------------- 
> 2   | a | b | a | ... | b | 
> ... 
> 9   | a | b | a | ... | b |

table 的内容大小可变(一个元素的最大大小为 9 个字符),因此如果不使用 [=24=,table 可能不会对齐]tabs \t 像这样:

> L\C | 1 | 2 | 3 | ... | 9 |
> --------------------------- 
> 1   | aaaaa | bb | aa | ... | bbbbb |
> --------------------------- 
> 2   | a | bbbbb | aaa | ... | bb | 
> ... 
> 9   | aaaaaaa | bbbb | a | ... | bb |

我将 table 的内容保存在 lists.Like 的列表中:

initialBoard([[sunTile, free, free, free, sunTile, free, free, free, sunTile],
                [free, sunTile, free, free, free, free, free, sunTile, free],
                [free, free, sunTile, free, free, free, sunTile, free, free],
                [free, free, free, free, free, free, free, free, free],
                [sunTile, free, free, free, free, free, free, free, sunTile],
                [free, free, free, free, free, free, free, free, free],
                [free, free, sunTile, free, free, free, sunTile, free, free],
                [free, sunTile, free, free, free, free, free, sunTile, free],
                [sunTile, free, free, free, sunTile, free, free, free, sunTile]]).

对于我在 prolog 文档中研究的内容,我必须使用 format/2

知道我该怎么做,既简单又快速吗?

只需从 SICSTUS Prolog 手册中获取示例并根据您的数据对其进行修改,这将为您提供居中列:

?- format("|~a~t~5||~t~a~t~8+|~t~a~t~8+|~t~a~t~8+|~n", [1,foo,bar,bah]).
|1   |  foo  |  bar  |  bah  |
true.

这将给出左对齐的列:

?- format("|~a~t~5||~a~t~8+|~a~t~8+|~a~t~8+|~n", [1, foo,bar,bah]).
|1   |foo    |bar    |bah    |
true.

~5| 将列位置固定在第 5 列。然后,将 ~t 视为一种弹性填充物。所以 ~t~a~t 居中,在上一列和下一列设置之间, ~a 对应的参数, ~t~a 将右对齐,而 ~a~t 将左对齐。 ~8+ 表示转到最后一个设置位置后的第 8 列位置,并建立下一个 "boundary" 相对于填充程序操作的位置。

获取行分隔符:

?- format("|~`-t~29||~n").
|----------------------------|
true.

换句话说,~t 将是您的弹性 space,但是,如文档中所述,

~`ct

将使用字符 c 作为填充符。