Scheme N皇后
(define (range n)(define (recur n)(if (= n -1)'()(cons n (recur (- n 1)))))(recur (- n 1)))(define (flatten a)(if (null? a)'() (append (car a) (flatten (cdr a)))))(define (safe? x y sln)(if (null? sln)#t(let ((px (car (car sln))) (py (cadr (car sln))))(if (or (= y py) (= (- py y) (- px x)) (= (- py y) (- x px)))#f (safe? x y (cdr sln))))))(define (nqueen n)(define (recur x)(if (= x -1)(list '())(flatten (map (lambda (y) (map (lambda (sln) (cons (list x y) sln)) (filter (lambda (sln) (safe? x y sln)) (recur (- x 1))))) (range n)))))(recur (- n 1)))(define (pl a)(if (null? a)'()(begin (display (car a)) (display "\n") (pl (cdr a)))))(pl (nqueen 4))
流 版本:
#lang racket (require racket/stream)(define-syntax-rule (scons a b) (stream-cons a b)) (define-syntax-rule (scar a) (stream-first a)) (define-syntax-rule (scdr a) (stream-rest a)) (define-syntax-rule (smap f s) (stream-map f s)) (define-syntax-rule (sfilter f s) (stream-filter f s)) (define-syntax-rule (sreduce f i s) (stream-fold f i s)) (define-syntax-rule (snull? s) (stream-empty? s)) (define-syntax-rule (sappend s ...) (stream-append s ...)) (define-syntax-rule (sfor f s) (stream-for-each f s))(define (sflatten a)(if (snull? a)empty-stream(sappend (scar a) (sflatten (scdr a)))))(define (srange n)(let recur ((x 0))(if (= x n)empty-stream(scons x (recur (+ x 1))))))(define (dis x)(begin (display x)(newline)))(define (sd s)(sfor dis s))(define (safe? x y sln)(if (snull? sln)#t(let ((px (scar (scar sln))) (py (scar (scdr (scar sln)))))(if (or (= y py) (= (- py y) (- px x)) (= (- py y) (- x px)))#f (safe? x y (scdr sln))))))(define (nqueen n)(define (recur x)(if (= x -1)(stream empty-stream)(sflatten (smap (lambda (y) (smap (lambda (sln) (scons (stream x y) sln)) (sfilter (lambda (sln) (safe? x y sln)) (recur (- x 1))))) (srange n)))))(recur (- n 1)))(define ass (sflatten (stream (srange 4) (srange 5)))) ;(define ass (stream (srange 4) (srange 5))) (sfor (lambda (x) (sfor (lambda (y) (sfor display y)(display ",")) x)(newline)) (nqueen 8))
转载于:https://www.cnblogs.com/xiangnan/p/3907175.html
Scheme N皇后相关推荐
- Scheme来实现八皇后问题(2)
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址http://www.cnblogs.com/Colin-Cai/p/9790466.html 作者:窗户QQ/ ...
- Scheme 语言概要
作为Lisp 变体,Scheme 是一门非常简洁的计算语言,使用它的编程人员可以摆脱语言本身的复杂性,把注意力集中到更重要的问题上,从而使语言真正成为解决问题的工具.本文分为上. 下两部分来介绍 sc ...
- 什么是Scheme?原来还可以这样应用!
Scheme定义 Scheme 编程语言是一种Lisp方言,诞生于1975年,由 MIT 的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成.它是现代两大Lisp方言 ...
- 基于C++11模板元编程实现Scheme中的list及相关函数式编程接口
前言 本文将介绍如何使用C++11模板元编程实现Scheme中的list及相关函数式编程接口,如list,cons,car,cdr,length,is_empty,reverse,append,map ...
- n皇后问题JS实现(N-Queens)
n皇后问题作为经典的面试题,今天在LeetCode刷到,解法比较直接,回溯递归.其他解法咱也不会.... Leetcode地址:https://leetcode.com/problems/n-quee ...
- 编码 data:text/html;c,关于 Data URI Scheme -- data:image/jpg;base64
转载一篇大神的文章 大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如: data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqA ...
- 回溯 皇后 算法笔记_算法笔记_04_回溯
设计思想: (1)适用:求解搜索问题和优化问题. (2)搜索空间:数,节点对应部分解向量,可行解在树叶上. (3)搜索过程:采用系统的方法隐含遍历搜索树. (4)搜索策略:深度优先,宽度优先,函数优先 ...
- C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题
C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...
- 递归/回溯:八皇后问题N-Queens
N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...
最新文章
- 来给你代码加上美颜吧!
- idea创建包怎么让包分层_干货 | 通勤包怎么选?我推荐这6只
- 2020\Simulation_1\2.约数个数
- 24、C++ Primer 4th 笔记,面向对象编程(2)
- 爬虫界又出神器|一款比selenium更高效的利器
- java 国家名称排序,我有一个国家名单。我想按字母顺序对它进行排序,除了两个我想放在第一位的国家...
- Codeforces Round #381 (Div. 2) D. Alyona and a tree 树上二分+前缀和思想
- switchhost
- html5做一个动画qq彩贝,HTML 第九章 作业
- 最小二乘支持向量机(LSSVM)学习记录
- unity3d 重力加速度传感器控制摄像头
- POJ1655 树重心模板题
- 小米机器人磁条_如何评价小米米家扫拖机器人1C?
- brew对redis的使用
- idea设置类注释和方法注释模板
- 三元一次方程组例题_最新《三元一次方程组及其解法》例题与讲解
- python使用pandas中的to_json函数将dataframe数据写入json文件中
- php中实现图片自动轮播,基于vue.js实现图片轮播效果
- 红队攻击思路知识框架
- JavaScript浏览器对象模型BOM