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
作为填充符。
我想打印一个 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
作为填充符。