sicp 4.3.1小节两题

本节开始介绍神奇的amb函数,为引入逻辑程序设计做铺垫。关于amb,有清华王垠的一个文档:
http://cs2.swfc.edu.cn/~wanghuan/wangyin1/amb/amb.html

4.35,与an-element-of类似:

(define (an-integer-between low high)
  (require (not (> low high)))
  (amb low (an-integer-between (+ low 1) high)))

4.36,与练习3.69相关,貌似我没解过这道题,略过。

4.37,两点大大缩小了搜索范围:
1)通过限制i^2+j^2<= high^2,平方和大于上限平方的全部过滤掉
2)k的判断不再通过amb取值,而是求平方和的平方根是否为整数来判断,进一步缩小了搜索范围

文章转自庄周梦蝶  ,原文发布时间2008-11-04

时间: 2024-10-23 20:05:51

sicp 4.3.1小节两题的相关文章

由于本人函授本科,期末JAVA两题编程不会写,楼主只会C。望高手们帮忙一下,明早一大早就要考试了,坐等

问题描述 某商场10年店庆活动,规定消费金额500元以上的部分可以给予95折,消费1000元以上的部分可以给予9折,消费2000元以上的部分可以给予85折.现要求设计一个程序,要求根据用户从键盘输入的商品总价计算出折后价.要求输出格式为:=======================原价:600.00元折后价:595.00元=======================设有一个四位数,它的四位数字分别是ABCD,而其又满足一下条件:ABCD*9=DCBA,试编写一段小程序计算这个四位数究竟是多少

sicp 4.2.1两题

4.25,如果在scheme解释器的应用序求值下,unless定义为一个过程,那么 (* (factorial (- n 1)) 将无穷递归下去.如果在正则序时,由于延时求值,仅当需要计算时才求值此表达式,不会造成无穷递归,在1的时候正常结束递归. 4.26,在上一节求值器的基础上定义unless的语法形式还是很简单的, 首先在analyze过程添加分析unless:  ((unless? exp) (analyze (unless->if exp))) 然后定义unless?和unless->

sicp 4.4.1小节习题

本节开始进入第4章最后一部分--逻辑程序设计.scheme将实现一种查询语言,非常类似prolog.由于解释器的实现在后面,还未读到,前面的习题我都将用prolog做测试,当然也给出scheme版本的解答,待以后测试.     首先给出依照书中所述写出的prolog事实库: address('BitDiddle Ben','Slumerville','Ridge Road',10). address('Hacker Alyssa P','Cambridge','Mass Ave',78). ad

sicp 4.2.2小节部分习题

4.27, ;;; L-Eval input: (define count 0) ;;; L-Eval value: ok ;;; L-Eval input: (define (id x)   (set! count (+ 1 count))   x) ;;; L-Eval value: ok ;;; L-Eval input: (define w (id (id 10))) ;;; L-Eval value: ok ;;; L-Eval input: count ;;; L-Eval valu

求助高手教这两题.微信红包奉上

问题描述 asp.net编写ASP.net程序,界面如下图,当单击"提交"按钮后,在表单下面显示出表单提交的信息.文件以test3.html,test3.asp文件名存在Z:盘中.Web数据库根据要求完成test4.asp程序(test4.asp在z:盘),程序能读取test数据库的"银行存款"的表头和所有记录,并通过表格显示所有数据表内容.显示界面如下图所示.完成后的程序以原test4.asp文件名存在Z:盘中.weixinxudefender 解决方案 解决方案

sicp 3.1.1小节习题尝试解答

这一节主要是介绍局部状态变量,介绍了set!和begin的语法,看来ruby使用!号来表示改变变量值不是什么新鲜主意.    习题3.1,不解释了 ;习题3.1 (define (make-accumulator init)   (define (accumulator num)     (set! init (+ init num))     init)   accumulator) 习题3.2,非常有趣的例子,在内部维持一个计数的变量即可,如果传入的参数是特定的符号就返回计数或者清0,如果不

sicp 4.3.3小节习题

  本节实现了amb求值器,题目都是扩展这个求值器,引入一些特殊的过程.我的尝试解答从4.51开始 习题4.51,要求实现permanent-set!,这个过程的副作用在遇到失败时不撤销,实现如下: ;扩充analyze  ((permanent-assignment? exp)          (analyze-permanent-assignment exp)) ;实现 (define (permanent-assignment? exp)   (tagged-list? exp 'per

[剑指Offer] 第5章课后题详解

[剑指Offer] 第5章课后题详解 目录 剑指Offer 第5章课后题详解 目录 删除指定字符 分析 解法 优化 删除重复元素 分析 解法 判断变位词 分析 解法 求助 删除指定字符 本题为<剑指Offer>"面试题35:第一个只出现一次的字符"一节中的"相关题目". 定义一个函数,输入两个字符串,从第一个字符串中删除在第二个字符串中出现过的所有字符. 分析 字符是一个长度为8的数据类型,共256种可能.创建一个长度为256的bool型数组,数组下标为

【SICP练习】12 练习1.18

 练习1.8 和前两题一样,依旧是只能用对数步数.而且这个迭代过程要基于加.加倍和折半运算.这一个习题要用到前面的函数,因此最好的做法是,每次都将写好的代码保存起来. (load"Test1.18.scm") 这行代码可以用来加载代码.而保存可以用C-X,C-W. 以下是该题的代码,这次我们写成块结构: (define(* x y)       (define (*-iter x y product)              (cond ((= y 0) product)