首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在prolog中创建由用户设置大小的列表

如何在prolog中创建由用户设置大小的列表
EN

Stack Overflow用户
提问于 2015-12-17 13:32:30
回答 1查看 294关注 0票数 2

我正在用Prolog写一个游戏。游戏有一个“棋盘”的形式如下所示,它有两个列表的“棋子”。董事会的大小固定在16个位置。我想让董事会“动态”,以便当游戏开始时,用户将定义大小。我想到了一种方法,但问题是,我的方式更多的是一种程序性的方式,而对于Prolog来说则不是那么正确。我想创建一个谓词大小/1,它将由用户在开始时初始化,然后所有的列表都将根据该谓词初始化,使用重复和裁剪并断言.有人能提出更好的实施方案吗?

代码语言:javascript
复制
/*--------------------------------------------------------------------------
Initial armies (lists of 1 to 8)
--------------------------------------------------------------------------*/
black_army([1,2,3,4,5,6,7,8]).
white_army([1,2,3,4,5,6,7,8]).

/*--------------------------------------------------------------------------
Initial Board (all positions empty)
--------------------------------------------------------------------------*/
board([
    (1,-,-),(2,-,-),(3,-,-),(4,-,-),
    (5,-,-),(6,-,-),(7,-,-),(8,-,-),
    (9,-,-),(10,-,-),(11,-,-),
    (13,-,-),(14,-,-),(15,-,-),(16,-,-),(12,-,-)
]).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-17 14:47:20

我想我会在数据声明中保持板的大小,使其动态化,并在用户请求更改时初始化:所以,保持代码原样,只需在前面添加(注意:未经测试的代码)

代码语言:javascript
复制
:- dynamic(black_army/1).
:- dynamic(white_army/1).
:- dynamic(board/1).

initialize_data(Size) :-
  Size > 1, % this should be a sensible value, of course
  retract(black_army(_)), 
  retract(white_army(_)),
  retract(board(_)),
  numlist(1,Size,B),
  assertz(black_army(B)),
  numlist(1,Size,W),
  assertz(white_army(W)),
  D is Size*2, findall((I,-,-), between(1,D,I), Board),
  assertz(board(Board)).
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34335880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档