首页 > 解决方案 > 在序言中打印数组/列表而不使用逗号、括号或空格的最佳方法?

问题描述

所以我才刚刚开始并在 prolog 中鬼混。

假设我有一个这样的数字列表:

X = [0,1,0,1,1,1,1,0]

并希望将这些数字打印到屏幕上,不带逗号、空格或换行符,如下所示:

?- write(X).
01011110

到目前为止,我已经尝试过使用 write(X)。它只是打印数组,我已经使用 pprint 模块愚弄了 print_term 但没有任何成功。

现在我有一种方法来创建一个 0 和 1 的网格,如下所示:

grid(0,[]).
grid(X,Y) :-
    X > 0, 
    X1 is X-1,
    random(0, 2, U),
    Y = [U|T],
    grid(X1,T).

上述方法按预期工作,只是没有得到我想要的打印输出。如果它改变了事情,我打算最终把它变成一个二维网格。

标签: arrayslistprologoutputswi-prolog

解决方案


假设输入中的所有元素确实是数字(或原子),您可以使用内置谓词atomic_list_concat/2

?- X = [0,1,0,1,1,1,1,0], atomic_list_concat(X,Y), write(Y).
01011110

如果它是一个表示为列表列表的矩阵,您可以执行以下操作:

print_matrix([]).
print_matrix([Row|Rows]):-
  atomic_list_concat(Row, TRow),
  writeln(TRow),
  print_matrix(Rows).

样品测试:

?- print_matrix([[1,0,0,1], [0,1,1,0]]).
1001
0110

推荐阅读