You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SWI-Prolog中打印键值对列表并输出对应映射值?

问题根因

现有代码的pretty_row/1逻辑缺少映射转换步骤:直接把列表里的棋子标识原子(如w-k、b-q)传给format打印,根本没有调用uci/2查询对应的输出字符,自然得不到预期的Kq结果。

修正后代码
% 棋子标识与打印字符的映射关系
uci(w-k, 'K').
uci(b-q, 'q').

% 测试列表
ls([w-k, b-q]).

% 打印逻辑:先做键值映射,再拼接输出所有字符
pretty_row(Ls) :-
    maplist(uci, Ls, PrintChars),
    maplist(format('~w'), PrintChars).
运行效果

执行查询:

?- ls(L), pretty_row(L).

将直接输出预期结果:

Kq

如果需要打印完成后自动换行,可以在pretty_row/1的最后加一句nl.即可。

逻辑说明
  • 用maplist(uci, Ls, PrintChars)遍历输入列表的每一个棋子标识,自动从uci/2事实中匹配到对应的打印字符,生成待打印的字符列表
  • 打印时给format传入~w控制符,明确按普通文本格式输出字符,避免格式解析异常
  • 后续如果要新增棋子映射,只需要补充对应的uci/2事实即可,不需要改动打印逻辑

内容的提问来源于stack exchange,提问作者eguneys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 08:09:42