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

Prolog实现国际象棋棋盘坐标排序及格式化打印方法

Prolog国际象棋棋盘打印功能实现

初始问题版本

最初编写的实现代码运行时会陷入无限循环,存在无意义的异常回溯问题,初始代码如下:

boardN([w-k-(a-1), b-k-(h-8), b-q-(h-1)]).


small(a-1).
small(h-8).
small(h-1).
small(h-7).

pretty(B) :- findall(X, small(X), Ps), pretty_h(Ps, B).
pretty_h([], _).
pretty_h([P|Rest], B) :- (member(Piece-P, B), uci(Piece);format('X')), pretty_h(Rest, B).

现有基础约定

棋盘数据表示

采用如下结构表示国际象棋棋盘数据:

board([w-k-(a-2), b-q-(c-3), w-r-(a-1), b-b-(h-8)]).

目标输出格式

期望执行查询后打印效果如下:

8       b
7
6
5
4
3 q
2K
1R
 abcdefgh

已实现功能模块

  • 棋子格式化输出谓词uci已编写完成,代码如下:
uci(w-r) :- format('R').
uci(w-q) :- format('Q').
uci(w-k) :- format('K').
uci(w-n) :- format('N').
uci(w-b) :- format('B').
uci(w-p) :- format('P').
uci(b-Role) :- format('~a', Role).
  • 位置大小比较谓词已编写完成,支持按a-8到h-1的顺序比较位置优先级,代码如下:
up(1-2).
up(2-3).
up(3-4).
up(4-5).
up(5-6).
up(6-7).
up(7-8).
upper(X-Y, []) :- up(X-Y).
upper(X-Y, [Z|Rest]) :- up(X-Z), upper(Z-Y, Rest).
right(a-b).
right(b-c).
right(c-d).
right(d-e).
right(e-f).
right(f-g).
right(g-h).
righter(X-Y, []) :- right(X-Y).
righter(X-Y, [Z|Rest]) :- right(X-Z), righter(Z-Y, Rest).
bigger(X-Y,X_-Y_) :- upper(Y-Y_); Y=Y_, righter(X-X_).

待实现需求

需要补全pretty谓词,当前pretty谓词的基础框架如下:

pretty(B) :- format('r k k \nhello~a', B).

要求执行查询?- board(B), pretty(B).时可正确输出棋盘。
核心实现规则:

  • 生成按a-8到h-1排序的所有棋盘位置列表
  • 逐行遍历每个位置,若当前位置存在对应棋子则打印棋子字符,否则打印空格
  • 实现逻辑尽可能简洁精准,避免冗余杂乱逻辑,解决初始版本的无限回溯问题

内容的提问来源于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 06:01:44