SWI-Prolog:寻找一种在单独的行中打印字典值的方法
SWI-Prolog: Looking for a way to print dictionary values in seperate lines
我正在寻找一种打印一些 dictionary 值的方法,每个值都在终端中的单独一行上。
例如,如果我有
X = abc{a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10}.
输出本身是:
?- X = abc{a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10}.
X = abc{a:1, b:2, c:3, d:4, e:5, f:6, g:7, h:8, i:9, j:10}.
为了清楚起见,我现在的目标是获得以下输出:
X = abc{
a:1,
b:2,
c:3,
d:4,
e:5,
f:6,
g:7,
h:8,
i:9,
j:10
}.
或者简单的
a:1
b:2
c:3
d:4
e:5
f:6
g:7
h:8
i:9
j:10
他们有办法做到这一点吗?
可以为字典提供自定义 portray/1
挂钩。例如:
portray(Term) :-
is_dict(Term),
dict_pairs(Term, Tag, Pairs),
writef("%p{\n", [Tag]),
foreach(member(Key-Value, Pairs), writef("\t%p: %p\n", [Key, Value])),
write("}").
这也适用于嵌套术语(尽管可以更加小心地正确缩进嵌套术语)。示例输出:
?- X = abc{a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:foo{bar:10, baz:11}}.
X = abc{
a: 1
b: 2
c: 3
d: 4
e: 5
f: 6
g: 7
h: 8
i: 9
j: foo{
bar: 10
baz: 11
}
}.
如果 portray/1
挂钩尚未启用以回答终端(这是给我的),您可能需要调整 answer_write_options
标志.
我正在寻找一种打印一些 dictionary 值的方法,每个值都在终端中的单独一行上。
例如,如果我有
X = abc{a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10}.
输出本身是:
?- X = abc{a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10}.
X = abc{a:1, b:2, c:3, d:4, e:5, f:6, g:7, h:8, i:9, j:10}.
为了清楚起见,我现在的目标是获得以下输出:
X = abc{
a:1,
b:2,
c:3,
d:4,
e:5,
f:6,
g:7,
h:8,
i:9,
j:10
}.
或者简单的
a:1
b:2
c:3
d:4
e:5
f:6
g:7
h:8
i:9
j:10
他们有办法做到这一点吗?
可以为字典提供自定义 portray/1
挂钩。例如:
portray(Term) :-
is_dict(Term),
dict_pairs(Term, Tag, Pairs),
writef("%p{\n", [Tag]),
foreach(member(Key-Value, Pairs), writef("\t%p: %p\n", [Key, Value])),
write("}").
这也适用于嵌套术语(尽管可以更加小心地正确缩进嵌套术语)。示例输出:
?- X = abc{a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:foo{bar:10, baz:11}}.
X = abc{
a: 1
b: 2
c: 3
d: 4
e: 5
f: 6
g: 7
h: 8
i: 9
j: foo{
bar: 10
baz: 11
}
}.
如果 portray/1
挂钩尚未启用以回答终端(这是给我的),您可能需要调整 answer_write_options
标志.