【SICP练习】39 练习1.44



练习1.44

相信如果大家认真做了前面的几道习题,这一题就比较简单了。smooth过程几乎可以直接写出:

(define smooth

(lambda (f)

   
(lambda (x)

       
(/ (+ (f (- x dx))

            
(f x)

            
(f (+ x dx)))

          
3))))

当然,在这之前应该先将dx关联一个数值,比如0.000001等等。至于利用smooth和练习1.43中的repeated来对给定的函数进行n次平滑处理,也是极为简单的。

((repeated (smooth square)2) 5)

;Value: 625.0000000033998

不对,这里有错。这里的2是用来重复两次(smooth square)操作的,是这一整个操作而不只是smooth,不信来测试一下。

((repeated (smooth square)3) 5)

;Value: 390625.0000042498

这里在smooth的同时也执行了3次square。正确的改法如下。

((repeated ((repeated smooth3) square) 2) 5)

这里的3才是经过了3次平滑处理,首先用一个repeated来执行3次smooth,传入的正是square。外面的2则是用来执行2次square,传入的则是5。

下面我们来将其写为一个过程,让其更加抽象。

(define smooth-repeated

   
(lambda (f n)

       
(lambda (x)

          
(((repeated smooth n) f) x))))

来测试一下咯。

((smooth-repeated square 10)5)

;Value: 25.000000000666663

其中的数字10就是smooth的次数。最近这几道题篇幅都比较长,也非常有意思。

时间: 2024-07-28 17:32:25

【SICP练习】39 练习1.44的相关文章

ios-能不能将NSDecimal值转换为UIImage

问题描述 能不能将NSDecimal值转换为UIImage 需要发送一些数据和UIImage到服务器中. 客户端会返回响应. 但是UIImage发送后客户端返回的就是这样: FaceImage":[255,216,255,224,0,16,74,70,73,70,0,1,1,1,1,44,1,44,0,0,255,219,0,67,0,8,6,6,7,6,5,8,7,7,7,9,9,8,10,12,20,13,12,11,11,12,25,18,19,15,20,29,26,31,30,29,2

如何获取屏幕保护程序的密码

大家都知道,windows9x只是一个桌面操作系统,它的稳定性和保密性一直受大家的批评.现在,我就通过介绍提取windows98的屏幕保护程序的密码的算法来说明windows98的保密性是怎样的差! 一.屏幕保护程序(以下简称屏保)密码的加密算法 通常,评价一个加密算法,就要看密钥怎么产生,加密算法是否强大.windows98的屏保密码的明文是有限制的,它的长度最大为128个字符,它的字符集是字母表,数字,和一些标点符号,也就是可视的ascii字符集.windows98密码密文的长度是明文长度的

UVa 11752 The Super Powers (数学)

11752 - The Super Powers Time limit: 1.000 seconds http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&category=467&page=show_problem&problem=28 52 We all know the Super Powers of this world and how they manage to get adv

ORACLE分析函数(5) 其他

1.除了使用数字来指定窗口范围,我们还可以使用日期类型,如: 2.lead和lag,返回当前窗口中与当前记录距离为n的记录.lag为向前取记录,lead为向后取记录 SELECT prod_id, lag(prod_list_price,1) over(order by prod_id) pre_1, lag(prod_list_price,2) over(order by prod_id) pre_2, prod_list_price, lead(prod_list_price,1) over

linux iostat命令详解和使用实例

 它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析.iostat属于sysstat软件包.可以用yum install sysstat 直接安装. 1.命令格式: iostat[参数][时间][次数] 2.命令功能:   通过iostat方便查看CPU.网卡.tty设备.磁盘.CD-ROM 等等设备的活动情况, 负载信息. 3.命令参数: -C 显示CPU使用情况 -d 显示磁

文件句柄(file handles) & 文件描述符(file descriptors)

1.概述 在实际工作中会经常遇到一些bug,有些就需要用到文件句柄,文件描述符等概念,比如报错: too many open files, 如果你对相关知识一无所知,那么debug起来将会异常痛苦.在linux操作系统中,文件句柄(包括Socket句柄).打开文件.文件指针.文件描述符的概念比较绕,而且windows的文件句柄又与此有何关联和区别?这一系列的问题是我们不得不面对的. 博主通过翻阅相关资料,并采用了一些demo来验证相关观点.如果文中有理解偏差,欢迎指正,对linux内核不是很熟,

javaMail发邮件

使用javaMail发送电子邮件需要两个jar包:activation.jar和mail.jar.具体代码如下: index.jsp: 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

在linux下实现用ffmpeg把YUV420帧保存成图片

在网上搜了很久相关的问题,但是好像没有一个在linux下跑得比较完整的例子,不过经过自己一番搜索和总结,终于做出来了,哈哈,看下面的代码吧. 这个例子可以保存成bmp或者jpeg格式的图片. 下面的结构是保存bmp图片是用到的结构: [cpp] view plaincopy //把内存对齐定义为2个字节,   //这个可以避免BITMAPFILEHEADER   //出现4字节的对齐而使bmp位图的头出错   #pragma pack(2)      //下面两个结构是位图的结构   typed

ASM 1——概念简介

1. ASM简介 ASM(Automated Storage Management,自动存储管理)是自Oracle10g这个版本Oracle推出的新功能.它是一个建立在数据库内核中的文件系统和卷管理器.它能自动将I/O负载均衡到所有可用的磁盘启动器上,以避免"热区".ASM能防止碎片,因此无须重建数据来回收空间.数据被均衡分布到所有硬盘上. ASM是Oracle用于替代操作系统所提供的LVM,它不仅支持单实例配置,也支持RAC这样的多实例配置,将给Oracle数据库管理员带来极大的方便