【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))

时间: 2024-09-24 19:10:00

【SICP练习】71 练习2.42的相关文章

SRID (空间引用识别号, 坐标系)

背景 转自互联网 http://www.baike.com/wiki/srid http://www.cnblogs.com/jackdong/archive/2010/12/20/1911558.html https://en.wikipedia.org/wiki/Geographic_coordinate_system https://en.wikipedia.org/wiki/Spatial_reference_system#Identifier 地球并不是平的,也不是正圆形,而是一个非标

[翻译] 使用开源库 JGDownloadAcceleration 控制下载队列,断点下载,加速下载

JGDownloadAcceleration 本人对原文进行了翻译,凑合看看,使用心得以后补上 https://github.com/JonasGessner/JGDownloadAcceleration   2013 Jonas Gessner JGDownloadAcceleration is a Networking library for iOS targeted at downloading large files on to the device's hard disk. JGDow

【HEVC学习与研究】28、第一帧第一个宏块的SAO部分完整解析结果

经过了前面一段时间的研究,现在大致将这第一个宏块SAO由码流到语法元素值的解析过程完整整理一下.这里没有太多原理部分,更多的像是一篇流水账一样,聊作记录. 在代码中,我们首先查看一下解析完条带头数据后,当前NAL中带解析的码流.还是看我们一直使用的这个demo序列的编码结果,码流中正式用语解析条带数据的值如: 206 103 162 107 167 87 243 112 29 35 44 3 245 69 197 199 130 168 75 91 169 13 159 38 44 174 14

平安暴跌再现“9·26魔咒”或遭外资机构沽空

9月26日,对中国平安而言是黑色星期一,公司的A股和H股股价均创两年半新低,可谓惨烈. 截至收盘,中国平安A股报收于34.37元,较前日大跌9.58%,一度触及跌停.平安暴跌带动下,沪指突破2400点重要关口,全天下跌近40点至2393.18点,创下14个月来的新低. H股跌幅更重.中国平安H股截至收盘跌幅13.71%,报42.5元,盘中最大跌幅超15%.恒生指数全日下挫261点,收于17407点,盘中曾跌穿17000大关,成交量792亿港元. 当日平安的表现主要受市场传闻影响,分析人士认为可能

平安暴跌累两市神秘空头引猜测

市场争议是否带动A股加速建底 "平安跌了8个点,怎么回事啊?"昨日午间,<第一财经日报>记者接到一位券商保险行业分析师的电话,他的话音显得惶惑不安:"基金经理都在相互打探消息,我的电话都被打爆了!" 昨日上证指数午后跌破2400点,创年内新低,其直接导火索就是中国平安(601318.SH,02318.HK)股价突然跳水. 中国平安H股午盘前暴跌12.99%,引发平安A股午后出现大幅跳水,一度触及跌停,最后以大跌9.58%报收34.37元,成交24.13亿

专家分析:中油香港续炒加快注资

泓福资产管理研究部主管 邓声兴 受惠美国经济数据较预期好,恒指上周持续上升,再创出8个月新高,惟未能突破19,000关口.全周升508点,平均每日 成交量为912亿.恒指周五受地产股带动,收市重上18,600水平以上.技术上,只要恒指守稳10天线(18,026)之上,则料本周可望上试19,000水平. 股份推介:中国(香港)石油(0135).受惠国际油价升至每桶近70美元水平,二.三线资源股出现追落后.当中中国(香港)石油上周五急升8.8%至6.05元.市场憧憬母公司注入资产的步伐加快,将有助中

Java处理Radius access-challenge

  最近使用 RSA Authentication Manager, 并且与其自带的Radius server整合, RSA的Radius server 配置不太透明, 目前只配成功了PAP方式的验证,CHAP目前不成功. RSA Radius在token输错3次后有要求用户输入next token的安全设置方式, 开始不知道java如何处理,后来查了一些资料,Radius协议本身是无状态的,客户端第二次next token 的request需要跟上前一次response中的state才能让服务

专家称5月用电量筑底回升经济回暖态势渐明朗

今年前5个月,我国用电量同比降幅在4%左右.比起1-4月,5月用电量降幅趋稳态势基本明确.分析人士认为,考虑到去年基数较高,当前用电量可能已在筑底回升中,宏观经济回暖态势将进一步明朗. 用电量数据一向被认为是反映宏观经济变动情况的晴雨表之一.自上世纪80年代以来,我国GDP与用电量及装机容量的相关系数均达到0.98,经济总量指标与电力总量指标呈高度正向相关关系.据估算,用电量每增加1%,GDP相应增长1.13%. 然而,这两个高度相关数据的走势,在今年出现一定程度的背离.今年一季度,全社会用电量

【SICP练习】116 练习3.42

练习3-42 原文 Exercise 3.42. Ben Bitdiddle suggests that it's a waste of time to create a new serialized procedure in response to every withdraw and deposit message. He says that make-account could be changed so that the calls to protected are done outsi