arrays - 在序言中打印数组/列表而不使用逗号、括号或空格的最佳方法?
问题描述
所以我才刚刚开始并在 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).
上述方法按预期工作,只是没有得到我想要的打印输出。如果它改变了事情,我打算最终把它变成一个二维网格。
解决方案
假设输入中的所有元素确实是数字(或原子),您可以使用内置谓词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
推荐阅读
- validation - 验证 PayPal Pay Now 和其他剪切和粘贴支付按钮是否为合法代码
- c# - 如何将 jquery 终端添加到我的 c# ASP.NET MVC 应用程序的视图中?
- plot - Cytospec 9.0 中点图数据的流式细胞术表示
- android - 除了在主应用程序 gradle 模块中启用数据绑定外,不能在其他包(库/SDK)中使用数据绑定
- reactjs - 为什么 Firebase 身份验证模拟器使用生产?
- delphi - Lazarus TStringGrid - 为单元格着色
- r - 使用 R 中的常用列获取函数的结果
- swift - Core Data 应用程序在启动时关闭“自愿退出”
- javascript - 错误:尝试运行简单的服务器 js 文件时找不到模块“socket.io”
- c# - C#将值从抽象类转换回对象