如何在Prolog中以最优方式用单行语句实现指定内容打印
Prolog多段write打印逻辑单行改写方案
最优改写方式是使用ISO标准内置的format/2谓词,无需引入额外依赖,跨Prolog实现兼容性最好,改写后的代码如下:
predicate([], L, Id, L2):- length(L2, N), format('The length ~w is ~w elements.~n', [Id, N]).
语法说明
- 第一个参数是格式化字符串,其中
~w为通用占位符,会按顺序匹配第二个参数列表里的对应项,输出行为和原生write完全一致,支持数字、原子、复合项等任意Prolog数据类型的打印 - 格式化字符串末尾的
~n等价于单独调用nl谓词,会自动输出平台适配的换行符,无需额外调用换行语句
如果你使用的是SWI-Prolog等特定Prolog实现,也可以选择用atomic_list_concat/2先拼接内容再输出:
% SWI-Prolog特有的写法,兼容性弱于format方案 atomic_list_concat(['The length ', Id, ' is ', N, ' elements.\n'], Output), write(Output).
两种方案对比下format/2写法更简洁,不需要构造拼接列表,性能也更优,是首选的实现方案。
内容的提问来源于stack exchange,提问作者Flávio Jardim
相关产品推荐
相关产品推荐

