【问题标题】:Best way to print array/list in prolog without commas, brackets, or spacing?在序言中打印数组/列表而不使用逗号、括号或空格的最佳方法?
【发布时间】:2019-06-05 20:27:05
【问题描述】:

所以我才刚刚开始玩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).

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

【问题讨论】:

    标签: arrays list prolog output swi-prolog


    【解决方案1】:

    假设输入中的所有元素确实是数字(或原子),您可以使用内置谓词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
    

    【讨论】:

    • @DevG:这是打印绑定的顶层。如果您不想获得这些绑定,您可以使用单个参数(输入列表)创建一个过程
    • @DevG:你看到了什么撇号?如果它们是数字,则不应使用撇号
    • 感谢您的帮助,将根据您的建议尝试该单参数程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2022-01-10
    • 2022-10-13
    • 2023-01-17
    • 1970-01-01
    相关资源
    最近更新 更多