python 示例分享---逻辑推理编程解决八皇后


Posted in Python onJuly 20, 2014

可以和Haskell , Prolog 一样做到模式匹配,

建立逻辑推到规则,描述问题,得出答案。

from pyDatalog import pyDatalog

pyDatalog.create_atoms( 'N, N1, X, Y, X0, X1, X2, X3, X4, X5, X6, X7' )
pyDatalog.create_atoms( 'ok, queens, next_queen, pred, pred2' )

size = 8
ok( X1, N, X2 ) <= ( X1 != X2 ) & ( X1 != X2 + N ) & ( X1 != X2 - N )

pred( N, N1 )  <= ( N > 1 ) & ( N1 == N - 1 )
queens( 1, X ) <= ( X1._in( range( size ) ) ) & ( X1 == X[0] )
queens( N, X ) <= pred( N, N1 ) & queens( N1, X[:-1] ) & next_queen( N, X )

pred2( N, N1 )   <= ( N > 2 ) & ( N1 == N - 1 )
next_queen( 2, X ) <= ( X1._in( range( 8 ) ) ) & ok( X[0], 1, X1 ) & ( X1 == X[1] )
next_queen( N, X ) <= pred2( N, N1 ) & next_queen( N1, X[1:] ) & ok( X[0], N1, X[-1] ) 

print( queens( size, ( X0, X1, X2, X3, X4, X5, X6, X7 ) ) )
Python 相关文章推荐
Python实现图像几何变换
Jul 06 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
Python中__slots__属性介绍与基本使用方法
Sep 05 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
python使用递归的方式建立二叉树
Jul 03 Python
python tkinter组件使用详解
Sep 16 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
python实现超级马里奥
Mar 18 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
Python实现byte转integer
Jun 03 Python
python中from module import * 的一个坑
Jul 20 #Python
用python代码做configure文件
Jul 20 #Python
python中的内置函数getattr()介绍及示例
Jul 20 #Python
Python实现的生成自我描述脚本分享(很有意思的程序)
Jul 18 #Python
Python中使用 Selenium 实现网页截图实例
Jul 18 #Python
Python中使用PyHook监听鼠标和键盘事件实例
Jul 18 #Python
python中使用pyhook实现键盘监控的例子
Jul 18 #Python
You might like
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
Django之模型层多表操作的实现
2019/01/08 Python
python实现一个简单的ping工具方法
2019/01/31 Python
考试退步检讨书
2014/01/15 职场文书
安全生产月标语
2014/10/07 职场文书
稽核岗位职责
2015/02/10 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
Nginx内网单机反向代理的实现
2021/11/07 Servers
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js