`
chelsea
  • 浏览: 123990 次
  • 来自: ...
社区版块
存档分类
最新评论

The SICP Notes

    博客分类:
 
阅读更多

另请参阅<<Essential SICP Primer>>

 

 

1,John Locke:有关人类理解的随笔,1690

心智的活动,除了尽力产生各种简单的认识外,主要表现在如下三个方面:1)将若干简单的认识组合为一个复合认识,由此产生出各种复杂的认识;2)将两个认识放在一起对照,不管它们如何简单或者复杂,在这样做时并不将它们合而为一;由此得到有关它们的相互关系的认识;3)将有关认识与那些在实际中和它们同在的所有其它认识隔离开,这就是抽象,所有具有普遍性的认识都是这样得到的


呵呵,和面向对象者爱引用的差不多:

 

在大英百科全书关于“分类学理论”中提出:人类在认识和理解现实世界的过程中,普遍运用着三个构造法则:

  1. 区分对象及其属性,例如,区分一棵树和树的大小或空间位置。

  2. 区分整体对象及其组成部分,例如,区分一棵树和树枝。

  3. 不同对象类的形成及区分,例如,所有树的类和所有石头的类的形成和区分

 



2,(+ (* 3 5) (- 10 6) )

虽然与人们的习惯相背,但却几乎是对解释器来说最容易实现的一种语法,形式完全统一;没有优先级,括号是唯一的优先级;任何复杂的表达式都可以由最简单的表达式组合(Composite)而成;在主流高级语言中,只能通过函数对象来模拟得到类似的表达式

3,甚高级语言

说明性描述和行动性描述有着内在联系,就像数学和计算机科学有着内在联系一样;有一个当前在程序设计语言设计领域中很重要的问题,那就是所谓的甚高级语言,在这种语言里,编程就是写说明性的语句;这里的想法是将解释器做的足够复杂,程序员描述了需要“做什么”的知识后,这种解释器就能自动产生出“如何做”的知识;一般而言这是不可能做到的,但在这一领域已经取得了巨大进步;

DSL有一定的联系

 

1,线性迭代(尾递归),线性递归,树型递归

2,lambda

匿名过程,直接以过程体表示过程,可用于以更加自然的方式来表示表达式

3,第一级元素的特权

可以用变量命名
可以提供给过程作为参数
可以由过程作为结果返回
可以包含在数据结构中

Lisp给了“过程”完全的第一级状态,C++则给了函数指针、函数对象完全的第一级状态

4,数据抽象

将数据对象的表示或说实现,与对数据对象的使用分开

 

1,闭包

是否可理解为Lisp对Composite Pattern的显式支持

2,基础通用结构

list,tree;tree可以看作list的composite

3,基础通用操作

  • 参数形式上的统一,使定义通用操作成为可能;返回值形式上的统一,使定义操作序列成为可能(Pipe Pattern)

  • 统一的参数和返回值形式是list(C++里则是iterator的区间)

  • 数据的序列用list表示,操作序列是否也可以用list表示?或许前文已经提到了我忘记了,或许后文还会说明;C++标准库尚未提供对操作的composite的支持,boost里有所涉及,但在Lisp里面,估计是很自然的支持

  • 目前涉及的通用操作已经有filter,map,accumulate,foreach等;filter和map可用在Pipe中间,但accumulate的返回值不保证是list,所以可能只能用在Pipe的末端;foreach干脆就没有返回值

 

1,语言要素

在描述一种语言时,应将注意力集中到语言的基本原语,它的组合手段,以及它的抽象手段,这是最重要的;

2,强健设计的语言层次

分层设计:一个复杂的系统应该通过一系列的层次构造出来,每个层次上所用的语言都提供了一些基本元素、组合手段、还有对该层次的细节做抽象的手段,即每个层次都为表述系统的特征提供了一套独特词汇,以及一套修改这一系统的方式;

正交设计:分层是因为目前的语言提供的连接手段是“调用”,如果语言能够提供“调用”之外的其它手段,如“织入”,则可能在分层的体系结构之外出现正交的体系结构;

3,Huffman编码与二叉树

待解决问题与所选数据结构的完美搭配

4,begin

即序列求值,C++中则是逗号表达式

5,树结构的缺点

叶子只能属于一个分支

6,函数式程序设计与命令式程序设计

不用任何赋值的程序设计称为函数式程序设计;与之相对应的,广泛采用赋值的程序设计被称为命令式程序设计

7,引用透明性与别名

如果一个语言支持在表达式里“同一的东西可以相互替换”的概念,这样替换不会改变有关表达式的值,这个语言就称为是具有“引用透明性”;一个计算对象可以通过多个名字访问的现象称为“别名”

8,同一与等价

“同一”在实现中往往是指向同一块存储的多个别名;“等价”则往往是指向多块存储的不同对象,但它们在计算中可以相互替换而不影响表达式的值;同一比等价更为严格

9,引用对象与值对象

在系统计算中需要必须是“同一”对象的,往往用引用对象来实现,此时对象有全局唯一ID,缺省即存储地址;

在系统计算中需要“等价”对象即可的,往往用值对象来实现,此时对象的存储地址无关紧要,这类对象常见有货币等

10,有状态与无状态

内部状态随时间变化的,称为有状态,反之为无状态;

时间是本质问题,有状态对象在并发系统中存在严重缺陷

有状态对象往往需要“同一性”,无状态对象往往“等价”即可

11,过程与数据

真实的情况是,在一个可以将过程当作对象的语言里,在“过程”和“数据”之间并没有本质性的差异,因此我们可以自由选择自己所需的语法糖衣,以便按自己选定的风格去做程序设计

 

1,并发

有共享资源的系统中,不可避免的问题

串行化只是解决并发的一种方法,并且会带来不可避免的死锁问题

2,流

概念上不同于表,实现上可以看作是采用了“延时求值”的表

3,状态

可以表示为值的“没有时间”的流

4,流的应用

替换迭代模型,替换局部状态,无穷流,表列(即流的流的流...)

5,流与状态

无状态的流可构造出有状态的系统,原因在于将提供时态的责任推给了用户方

6,对象与函数式

一种将世界模拟为一集相互分离的,受时间约束的,有局部状态的,相互交流的对象

一种将世界看作一个大函数,是单一的,无时间的,无状态的统一体

 

1,应用序与正则序

惰性求值/延时求值不止带来性能上的优化,更带来行为本质上的变化

2,非确定性计算

将选择与回溯机制隐藏在语言内部,可轻松解决诸如21点之类的问题,因为“描述即解

3,规则

一条规则就是一个逻辑蕴含:如果对所有模式变量的一个赋值满足规则的体,那么它就满足其结论;规则的体可以看作一组条件的组合,规则的结论可以看作对满足这组条件的实例进行的描述

4,合一

模式匹配的一种推广,即为了找出查询时应该使用哪条规则,而找出规则结论与查询条件能够模式匹配的那条规则

5,逻辑程序设计的目标

为程序员提供一种技术,它能将计算问题分解为两个相互分离的问题:“什么”需要计算,以及“如何”进行这一计算;通常“如何”进行计算便是一组规则,“什么”需要计算便是规则的结论,从使用者的角度来说,对规则的“描述即解”,SQL应该是一种典型的应用

6,not

逻辑程序设计语言里的not反映了一种所谓的“封闭世界假说”,它认为所有有关的知识都已经包含在所用的数据库里了

 

1,receive返回多个值

采用了多个容器做参数的方式

2,垃圾收集

停止并复制法,标记并清除法

3,尾递归

与惰性求值一样,尾递归的优化并不止是一种优化,而可能改变运行时行为,如使用常量空间,否则可能耗尽系统空间

4,编译与解释

编译可以大大提高程序执行的效率,解释则为程序开发和排除错误提供了一个更强大的环境,因为被执行的源代码在运行期间都是可用的,可用去检查和修改,此外,由于整个基本操作的库都在那里,我们可以在排除错误的过程中构造新程序,随时把它们加入系统中;

由于看到了编译和解释的互补优势,现代程序开发环境很推崇一种混合的策略,使得解释性程序和编译性程序可以互相调用;这就使程序员可以编译那些自己认为已经排除了错误的部分,从而取得编译方式的效率优势,而让那些正在进行交互式开发和排错的,还在不断变化的程序部分的执行仍然维持在解释模式中;还可以使程序员根据实际问题选择最合适的语言

分享到:
评论

相关推荐

    SICP-计算机课后习题资源

    What I have stored is the reading notes of SICP and the solutions of the exercises after class.:art:SICP()

    发酵基因工程菌.pptx

    发酵基因工程菌.pptx

    基于MATLAB/Simulink的三相锁相环(SFT-PLL vs Dalbe-PLL)仿真研究及其应用

    内容概要:本文详细介绍了两种三相锁相环(PLL)方案——滑动连续傅里叶变换锁相环(SFT-PLL)和d-q轴解耦锁相环(Dalbe-PLL)在MATLAB/Simulink R2015b中的实现与比较。SFT-PLL采用滑动窗口进行实时傅里叶变换,能够有效滤除谐波并在频率突变时表现出更快的响应速度;Dalbe-PLL则通过改进的d-q变换实现更好的抗干扰能力,尤其在电压跌落情况下表现更为稳健。文中不仅展示了具体的MATLAB代码实现,还讨论了不同应用场景下的优缺点以及优化技巧。 适合人群:从事电力电子、控制系统设计的研究人员和技术工程师,尤其是对锁相环技术和MATLAB/Simulink仿真感兴趣的读者。 使用场景及目标:适用于需要精确电网同步的应用场景,如新能源并网、变频器控制等。目标是帮助读者理解这两种PLL的工作原理,掌握其实现方法,并能够在实际工程项目中做出合理的方案选择。 其他说明:文章提供了详细的代码片段和仿真结果,便于读者理解和复现实验。同时,针对不同的应用场景给出了具体的建议,如光伏并网选用Dalbe-PLL,电机控制选用SFT-PLL。此外,还提到了一些常见的实现细节和注意事项,如窗口长度的选择、PI参数的调整等。

    LabVIEW与Kvaser USBcan实现汽车ECU UDS通讯及Hex文件烧录

    内容概要:本文详细介绍了如何利用LabVIEW和Kvaser USBcan实现汽车ECU的UDS通讯以及Hex文件烧录。首先,通过调用Kvaser API进行CAN总线初始化和通信,确保波特率和通道号正确配置。接着,重点讲解了ISO-TP多帧传输的处理方法,包括滑动窗口机制、流控帧处理和超时重传策略。针对Hex文件解析,文章展示了如何将Intel Hex格式的数据转化为二进制流并处理地址不连续的问题。此外,还涉及了CRC32校验、UDS服务调度(如进入扩展会话、请求下载、传输数据等)、日志记录等功能的具体实现。最后,分享了一些调试经验和优化技巧,如动态调整发送速率、使用TDMS格式存储日志等。 适合人群:熟悉LabVIEW编程环境并对汽车电子控制系统有一定了解的研发工程师和技术爱好者。 使用场景及目标:适用于需要对汽车ECU进行固件更新或调试的专业人士,旨在帮助他们掌握UDS协议的应用,提高工作效率并减少潜在错误。 其他说明:文中提供了丰富的代码片段作为参考,同时强调了实际应用中的注意事项,如设备兼容性和安全性考虑。

    chromedriver-mac-x64-137.0.7123.0.zip

    chromedriver-mac-x64-137.0.7123.0.zip

    MATLAB/Simulink中三相SPWM与THIPWM逆变器仿真的构建与性能对比

    内容概要:本文详细介绍了如何利用MATLAB/Simulink R2015b构建三相SPWM(正弦脉宽调制)和THIPWM(三次谐波注入脉宽调制)逆变器的仿真模型。首先,针对SPWM,文中讲解了如何设置Sine Wave模块生成三相调制波以及Repeating Sequence模块生成载波,并强调了死区时间和PWM生成的关键步骤。对于THIPWM,则着重于调制波中加入三次谐波的方法及其对输出电压的影响。此外,还讨论了两种调制方式的谐波分布特点,指出THIPWM在直流电压利用率上的优势,但也提到其带来的高频谐波问题。最后,作者提供了关于离散化设置、滤波器设计等方面的实用技巧。 适用人群:具有一定MATLAB/Simulink基础,从事电力电子研究或工程设计的技术人员。 使用场景及目标:适用于希望深入了解SPWM和THIPWM工作原理的研究人员和技术人员,旨在通过实际建模加深对这两种调制方法的理解,优化逆变器设计。 其他说明:文中提供的模型文件可在GitHub下载,便于读者进行实践操作。同时提醒读者注意不同MATLAB版本间的兼容性问题。

    陈龙老师开发的有限元包 matlab版.zip

    matlab

    基于MATLAB的牛顿-拉夫逊法潮流计算程序:支持IEEE标准网络的数据处理与可视化

    内容概要:本文介绍了一个基于MATLAB的潮流计算程序,主要采用牛顿-拉夫逊法进行电力系统仿真。该程序支持IEEE多个标准测试网络(14/30/57/118/300节点),并具有高度的可移植性和服务提升特性。程序由三个主要模块组成:数据加载器、牛顿-拉夫逊法核心以及可视化输出。数据加载器能够灵活地处理多种格式的标准网络数据文件,牛顿-拉夫逊法核心利用稀疏矩阵优化内存占用和计算效率,可视化输出模块提供直观的电压曲线和导纳矩阵三维可视化。此外,程序采用了面向对象的设计,增强了代码的可维护性和扩展性。 适合人群:电力系统研究人员、电气工程学生、MATLAB开发者。 使用场景及目标:适用于电力系统仿真实验室、教学演示、科研项目等场景。主要用于理解和掌握牛顿-拉夫逊法在潮流计算中的应用,提高计算效率和准确性,同时为后续的研究和开发提供基础工具。 其他说明:程序已开源并在GitHub上托管,提供了详细的代码注释和使用指南。建议使用者在实践中不断调整和优化代码,特别是在处理大规模网络时,可以通过多种方式进行性能优化。

    2023年四川省一级计算机等级考试训练题.doc

    2023年四川省一级计算机等级考试训练题.doc

    MATLAB/Simulink中WindRose工具绘制风玫瑰图及其数据分析应用

    内容概要:本文详细介绍了MATLAB/Simulink中的WindRose工具用于绘制风玫瑰图的方法以及相关数据处理技巧。首先,文章展示了基本的风玫瑰图绘制方法,只需简单的几行代码即可生成专业的风玫瑰图,并能够自定义颜色、方向分割等参数。其次,针对实际应用场景如空气质量预测、季度对比分析等,文中提供了具体的代码实例来展示如何利用WindRose进行多维度的数据可视化。此外,还讲解了如何将图形中的数据提取并保存为表格形式,便于进一步的数据分析和报告制作。最后,分享了一些高级技巧,如处理特殊数据情况、批量生成图像等。 适用人群:适用于有一定MATLAB基础,从事气象、环境科学、风电工程等领域研究的专业人士。 使用场景及目标:①快速高效地完成风向风速数据的可视化;②通过定制化配置满足不同场合的需求;③实现数据的便捷导出与后续分析;④提高工作效率,减少重复劳动。 其他说明:虽然WindRose工具在某些方面存在局限性,但它凭借强大的功能和易用性成为处理气象数据的理想选择。

    数据集-part1-沥青路面缺陷目标检测数据集-labelme-6000

    part1包含2000张图片,全部6000张。 当前道路养护领域面临几个显著挑战: 1. 数据稀缺性:大多数机构缺乏高质量的标注数据集来训练可靠的缺陷检测模型 2. 类别不平衡:现有数据集往往只关注裂缝等常见缺陷,忽视修补区域和井盖等重要类别 本沥青路面缺陷目标检测数据集提供6,000张精心标注的高质量图像,包含6个关键类别:裂缝、裂缝修补、坑洞、坑洞修补、井盖及其他。 数据集介绍: https://mp.csdn.net/mp_blog/creation/success/147170602

    ATV61/71变频器30-45Kw驱动板电路详解与常见故障排除

    内容概要:本文详细解析了ATV61/71系列变频器中30-45Kw功率段驱动板的电路设计及其常见故障排除方法。首先介绍了驱动板的整体结构和关键组件,如IGBT驱动部分、光耦隔离电路、电压检测电路、温度检测电路等。接着通过具体实例讲解了各个部分可能出现的问题及解决方案,如电阻阻值偏差、光耦老化、电容耐压不足、跳线错误等。文中还提供了多个实用的代码片段,帮助工程师进行参数配置、故障诊断和性能优化。最后强调了一些维修小技巧和注意事项,确保设备稳定运行。 适合人群:从事变频器维修、维护的技术人员以及相关领域的工程师。 使用场景及目标:①帮助技术人员理解和掌握ATV61/71变频器驱动板的工作原理;②提供详细的故障排查指南,提高维修效率;③指导工程师进行合理的参数配置和性能优化。 其他说明:本文不仅涵盖了理论知识,还包括大量实践经验,对于实际工作中遇到的各种问题都有很好的指导意义。

    《基于YOLOv8的社区高空卫星天线固定装置检测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    2023年中南大学数据库题库数据库系统概论.doc

    2023年中南大学数据库题库数据库系统概论.doc

    万年历,真的很好内含原理图和原程序代码.zip

    万年历,真的很好内含原理图和原程序代码.zip

    电流互感器的两相星形接线的建模与仿真

    电流互感器的两相星形接线的建模与仿真 本仿真模型基于MATLAB/Simulink(版本MATLAB 2016Rb)软件。建议采用matlab2016 Rb及以上版本打开。(若需要其他版本可联系代为转换)

    《基于YOLOv8的社区健身步道人车混行预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    电力电子领域基于MATLAB/Simulink的三种PWM调制方法逆变电路仿真研究

    内容概要:本文详细介绍了基于MATLAB/Simulink R2015b平台的三种PWM调制方法(双极性PWM、单极性PWM和正弦PWM)在逆变电路中的仿真建模。每种调制方法都有详细的模型搭建步骤、关键代码片段以及仿真结果分析。双极性PWM的特点是输出波形正负半周对称,适用于标准正弦波输出;单极性PWM调制效率较高,但输出谐波较多;正弦PWM适合变频调速系统,具有良好的动态特性。通过对三种调制方法的对比,帮助读者理解各自的优势和应用场景。 适合人群:从事电力电子技术领域的研究人员和技术人员,尤其是对PWM调制技术和逆变电路感兴趣的初学者和有一定经验的研发人员。 使用场景及目标:①理解和掌握三种PWM调制方法的工作原理及其在逆变电路中的应用;②通过仿真模型验证不同PWM调制方法的效果,优化逆变电路的设计;③为实际工程项目提供理论支持和技术参考。 其他说明:文中提供了详细的MATLAB代码片段和仿真结果,便于读者复现实验。此外,还讨论了不同PWM调制方法在实际应用中的优缺点,有助于读者根据具体需求选择合适的调制方式。

    《基于YOLOv8的食品加工车间工作服洁净度检测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    多智能体系统中二阶非线性动态的领导跟随一致性控制:动态事件触发与DOBC应对干扰

    内容概要:本文探讨了在多智能体系统中,特别是无人机编队控制中,如何利用动态事件触发机制和扰动观测器控制(DOBC)来实现领导跟随一致性。文中详细介绍了二阶非线性多智能体系统的动力学模型,以及如何通过智能触发条件和DOBC来应对外部干扰,从而确保系统在面对突变情况时能够快速调整并维持稳定的编队形态。此外,文章还讨论了实际应用中的注意事项和技术细节,如非线性项的处理、事件触发阈值的设计、通信效率的提升等。 适合人群:从事多智能体系统研究、无人机编队控制、自动化控制领域的研究人员和工程师。 使用场景及目标:适用于需要高效通信和鲁棒性的多智能体系统应用场景,如无人机编队飞行、自动驾驶车队等。主要目标是在有限的通信资源条件下,实现高精度的领导跟随一致性控制,同时有效抵抗外部干扰。 其他说明:文中提供了具体的数学模型和代码片段,帮助读者更好地理解和实现相关算法。同时强调了实际部署时需要注意的技术细节,如非线性项的建模、通信延迟的处理等。

Global site tag (gtag.js) - Google Analytics