练习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相关推荐

  1. BGP高防是什么意思呢?BGP高防服务器租用 45.250.42.X

    大家都知道BGP高防是DDOS流量攻击的首选防御之一,那么BGP高防到底是什么?BGP高防有什么优势呢?小驰给大家讲一下 BGP高防协议是什么? BGP协议指边界网关协议(Border Gateway ...

  2. Mercurial 版本控制服务器(Web Server)的搭建

    关于 Mercurial 的简介和基本操作,请参见小G的随笔<Mercurial(Hg)基本操作>. 我不再赘述 Mercurial 的各种让人振奋的特性,上一篇中我们提到了使用第三方版本 ...

  3. hushen 300

    代码 简称 收盘价 权重 涨跌 涨跌幅 成交量(万) 成交额(万) 总股本(亿) 自由流通股本(亿) 总市值(亿) 自由流通市值(亿) 贡献点 上市板 市盈率-TTM 证监会行业 Wind一级行业 W ...

  4. 使用resNet网络 进行图像分类(jupyter notebook)

    这学期做了三次的CV把他贴出来, resNet网络的结构 import torch.nn as nn import torchclass BasicBlock(nn.Module):expansion ...

  5. 第8章 线性时间排序

    一.概念 任何比较排序在最坏情况下都要用O(lgn)次比较不进行排序 计算排序.基数排序.桶排序都是稳定排序 二.代码 #include <iostream> #include <c ...

  6. 组织机构代码输入测试用例_测试代码以用于过大的输入

    组织机构代码输入测试用例 在编写单元测试时,我们主要关注业务的正确性. 我们将竭尽所能,开开心心地走在最前沿. 我们有时会进行微基准测试并衡量吞吐量. 但是经常遗漏的一个方面是当输入过大时我们的代码如 ...

  7. Python机器学习 使用sklearn构建决策树复习

    熵值的计算公式如上图. 预剪枝:是在决策树的生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分即结束树的构建并将当前节点标记为叶结点: 后剪枝:是先从训练 ...

  8. radius java_Java处理Radius access-challenge

    最近使用 RSA Authentication Manager, 并且与其自带的Radius server整合, RSA的Radius server 配置不太透明, 目前只配成功了PAP方式的验证,C ...

  9. 爬取豆瓣电影储存到数据库MONGDB中以及反反爬虫

    1.代码如下: doubanmoive.py # -*- coding: utf-8 -*- import scrapy from douban.items import DoubanItemclas ...

最新文章

  1. 三、Qt Creator登录对话框
  2. 第四周项目一-求四个数的最大公约数
  3. matlab 1 f噪声,跪求1/f噪声生成代码解释!!
  4. 数据中心市场的投资风险与回报
  5. python 两个[]_Python中的两个测试工具
  6. Android APK反编译就这么简单 详解
  7. 微软为何选择在 Github 上开源 .NET 核心?
  8. SpringCloud注解和配置以及pom依赖说明
  9. 【LGR-050】洛谷8月月赛
  10. FormData 上传文件
  11. jstack简单使用,定位死循环、线程阻塞、死锁等问题
  12. 修改Win7启动顺序和启动菜单名称
  13. SPR传感原理(附Matlab源码)
  14. Flutter 分享功能之Share
  15. Linux学习笔记2—常见指令的使用
  16. LOJ10064黑暗城堡
  17. 用计算机打字用英语怎么说,打字用英语怎么说
  18. 关于送货单的格式要求?
  19. JAVA根据PDF文件生成图片
  20. 以盒马生鲜为例,如何玩转线上线下电商门店经营模式?

热门文章

  1. shell定时执行java,shell学习之定时运行作业
  2. Hue由于主备NameNode切换引发的问题
  3. java object 数组_Java用Object实现数组队列的泛思与理解
  4. BookCorpus数据集爬虫
  5. ES6 iterator 迭代器
  6. 经典]Linux内核中ioremap映射的透彻理解【转】
  7. 前端是Sencha Touch+ Cordova(转)
  8. 【转载】spring mvc 使用session
  9. django中处理表单实例
  10. JAMStack-SSR/SSG 框架