【SICP练习】71 练习2.42
练习2.42
这道题曾经在C#中写过,但是写出来的代码却没有Lisp中的朴素。用了一大堆的数组和for循环。但是在这里,用car、cdr来构造就行了。
我们按书中给出的步骤来一步一步求解这个问题。首先是棋局,就按书上的示意图,从上往下的来排皇后的位置。诸如此时书中皇后的位置为:’(6 3 1 7 5 8 2 4)。
然后就是过程adjoin-position。rest-of-queens是在前k-1列放置k-1个皇后的一种方式,new-row是在第k列放置所考虑的编号。因此这一过程定义为:
(define (adjoin-position k new-rowrest-of-queens)
(cons new-row rest-of-queens))
因为书上出现了k,我们就象征性的将k作为一个参数好了。像这种一行的代码在前面遇见过很多次了。cons就代表则构造了吧。
空棋盘则用‘()表示。因此定义如下:
(define empty-board ‘())
接下来就是这道题中的关键了,safe?。看到棋局的样子不用想也知道用迭代了吧。
(define (safe? k position)
(define (safe?-iter row-of-new-queen rest-of-queens i)
(if (null? rest-of-queens)
#t
(let ((row-of-current-queen (carrest-of-queens)))
(if (or (= row-of-new-queenrow-of-current-queen)
(= row-of-new-queen (-row-of-current-queen i))
(= row-of-new-queen (+row-of-current-queen i)))
#t
(safe?-iter row-of-new-queen (cdrrest-of-queens) (+ i 1))))))
(safe?-iter (car position) (cdr position) 1))
版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。
转载于:https://www.cnblogs.com/NoMasp/p/4786148.html
【SICP练习】71 练习2.42相关推荐
- BGP高防是什么意思呢?BGP高防服务器租用 45.250.42.X
大家都知道BGP高防是DDOS流量攻击的首选防御之一,那么BGP高防到底是什么?BGP高防有什么优势呢?小驰给大家讲一下 BGP高防协议是什么? BGP协议指边界网关协议(Border Gateway ...
- Mercurial 版本控制服务器(Web Server)的搭建
关于 Mercurial 的简介和基本操作,请参见小G的随笔<Mercurial(Hg)基本操作>. 我不再赘述 Mercurial 的各种让人振奋的特性,上一篇中我们提到了使用第三方版本 ...
- hushen 300
代码 简称 收盘价 权重 涨跌 涨跌幅 成交量(万) 成交额(万) 总股本(亿) 自由流通股本(亿) 总市值(亿) 自由流通市值(亿) 贡献点 上市板 市盈率-TTM 证监会行业 Wind一级行业 W ...
- 使用resNet网络 进行图像分类(jupyter notebook)
这学期做了三次的CV把他贴出来, resNet网络的结构 import torch.nn as nn import torchclass BasicBlock(nn.Module):expansion ...
- 第8章 线性时间排序
一.概念 任何比较排序在最坏情况下都要用O(lgn)次比较不进行排序 计算排序.基数排序.桶排序都是稳定排序 二.代码 #include <iostream> #include <c ...
- 组织机构代码输入测试用例_测试代码以用于过大的输入
组织机构代码输入测试用例 在编写单元测试时,我们主要关注业务的正确性. 我们将竭尽所能,开开心心地走在最前沿. 我们有时会进行微基准测试并衡量吞吐量. 但是经常遗漏的一个方面是当输入过大时我们的代码如 ...
- Python机器学习 使用sklearn构建决策树复习
熵值的计算公式如上图. 预剪枝:是在决策树的生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分即结束树的构建并将当前节点标记为叶结点: 后剪枝:是先从训练 ...
- radius java_Java处理Radius access-challenge
最近使用 RSA Authentication Manager, 并且与其自带的Radius server整合, RSA的Radius server 配置不太透明, 目前只配成功了PAP方式的验证,C ...
- 爬取豆瓣电影储存到数据库MONGDB中以及反反爬虫
1.代码如下: doubanmoive.py # -*- coding: utf-8 -*- import scrapy from douban.items import DoubanItemclas ...
最新文章
- 三、Qt Creator登录对话框
- 第四周项目一-求四个数的最大公约数
- matlab 1 f噪声,跪求1/f噪声生成代码解释!!
- 数据中心市场的投资风险与回报
- python 两个[]_Python中的两个测试工具
- Android APK反编译就这么简单 详解
- 微软为何选择在 Github 上开源 .NET 核心?
- SpringCloud注解和配置以及pom依赖说明
- 【LGR-050】洛谷8月月赛
- FormData 上传文件
- jstack简单使用,定位死循环、线程阻塞、死锁等问题
- 修改Win7启动顺序和启动菜单名称
- SPR传感原理(附Matlab源码)
- Flutter 分享功能之Share
- Linux学习笔记2—常见指令的使用
- LOJ10064黑暗城堡
- 用计算机打字用英语怎么说,打字用英语怎么说
- 关于送货单的格式要求?
- JAVA根据PDF文件生成图片
- 以盒马生鲜为例,如何玩转线上线下电商门店经营模式?