
程序构造和解释(Scheme语言)
文章平均质量分 71
享受纯粹的编程乐趣,为我们所热爱的事业再战一次。
Once-Day
长路漫漫,一人太孤单,无人理解,独自前行,给世界留下一点微不足道的痕迹,稍微弥补曾经的遗憾。
展开
-
Scheme 编程语言(2)启程
Scheme编程语言第二章基本语法的中文翻译。翻译 2022-10-27 01:25:19 · 1016 阅读 · 0 评论 -
Scheme 编程语言(1)介绍
Scheme是一种通用的计算机编程语言。它是一种高级语言,支持操作结构化数据,如字符串、列表和向量,以及传统的数据类型(数字和字符)。Scheme通常被认为专于符号处理程序,但它同样具有丰富的数据类型和灵活的控制结构,因此也可作为通用的语言。可以使用Scheme来编写文本编辑器、优化的编译器、操作系统、图形软件包、专家系统、数值应用程序、财务分析软件包、虚拟现实系统,以及几乎所有其他类型的应用程序。Scheme是一种相当简单的语言,因为它基于少量的语法形式和语义概念。翻译 2022-10-23 15:33:21 · 2063 阅读 · 0 评论 -
算法之八皇后谜题(以序列为约定界面来求解)
author:onceday date:2022年6月15日在国际象棋棋盘上,如8x8大小,摆放8个皇后,使其任意两个皇后都不能在同一行、同一列或者同一对对角线上。假设棋盘大小为n∗nn*nn∗n,皇后数量也为n个。一种解法是,从一个方向,如从右向左遍历棋盘,每遍历一列,都有n种可能性,然后将这些可能一一过滤,去掉不满足条件的情况,剩下的继续下一轮操作。最后放完所有皇后剩下的情况都将是该问题的解。每一种情况按一下方式存放。...原创 2022-06-15 12:58:08 · 245 阅读 · 0 评论 -
算法之过程计数(丘奇)
author:onceday date:2022年6月15日,以及为使这些过程成为一套合法表示,它们就必须满足的一组特定条件。目前有两种方法来形式化它:一个较为明显的例子是序对的过程性表示。原创 2022-06-15 12:57:25 · 252 阅读 · 0 评论 -
算法之区间算术
author:onceday date:2022年6月15日诸如电阻之类实际问题都会有一个误差,如何根据已知的基本元器件误差计算组合元器件的误差就显得很有实际价值。将区间抽象为复合数据类型,其为一个(上限值+下限值)的组合。...原创 2022-06-15 12:56:12 · 1354 阅读 · 0 评论 -
算法之有理数运算
author:onceday date:2022年6月15日构建抽象复合数据:以下是其构造函数和选择函数:即使在没有具体将这些有理数实现的情况下,也可以根据抽象的数据对其进行计算。这是一种按愿望思维的强大能力。基于以下数学过程:...原创 2022-06-15 12:49:28 · 318 阅读 · 0 评论 -
算法之不动点、平均阻尼、一般性牛顿法
author:onceday date:2022年6月12日如果存在:函数不动点、平均阻尼,牛顿法求解x^n的根原创 2022-06-12 12:51:47 · 586 阅读 · 0 评论 -
算法之抽象求和器、累积器、过滤器
author:onceday date:2022年6月11日∑n=abf(n)=f(a)+...+f(b)三类简单的抽象操作原创 2022-06-11 18:11:46 · 164 阅读 · 0 评论 -
算法之素数检测
author:onceday date:2022年6月11日几种常见素数检测方法原创 2022-06-11 17:25:56 · 443 阅读 · 0 评论 -
程序构造和解释之第一章习题
author:onceday date:2022年6月8日Structure and Interpretation of Computer Programs Second Edition.第一章习题基本解答原创 2022-06-11 16:39:13 · 604 阅读 · 0 评论 -
程序构造和解释之过程抽象
author:onceday date: 2022年6月5日任何一门语言需要关注其将简单的认识组合起来形成更复杂认识的方法,可分为三种机制:程序设计有两类要素:过程和数据直观来说:这里使用的语言为。语法参考:Chez Scheme Version 9 User’s Guide (cisco.github.io)当用键盘输入一个表达式后,解释器就会将他对这一表达式的求值结果表达出来。精准来说,是由数字组成的表达式,它表示的是以10作为基数的数。如上的表达式称为组合式,构成方式是用一对括号括起一些表达式,原创 2022-06-10 22:31:29 · 2730 阅读 · 0 评论 -
算法之对数步数求出斐波那契数
author:onceday date:2022年6月8日斐波那切数表达式fib(n)={0如果n=01如果n=1fib(n−1)+fib(n−2)其他情况fib(n)=\begin{cases}0&\text{如果}n=0\\1&\text{如果}n=1\\fib(n-1)+fib(n-2)&其他情况\end{cases}fib(n)=⎩⎪⎨⎪⎧01fib(n−1)+fib(n−2)如果n=0如果n=1其他情况因此有:(fib(1),fib(0))=(1,0)=(a,b)(fi原创 2022-06-08 16:34:01 · 210 阅读 · 0 评论 -
算法之迭代法求乘积值
author:onceday date:2022年6月8日这里支持double翻倍和halve折半运算。如何迭代计算a∗ba*ba∗b呢?令d+a∗b=a∗bd+a*b=a*bd+a∗b=a∗b,则d=0d=0d=0。一样分析,如果b为偶数,则:d+a∗b=d+2a∗(b/2)=d′+a′∗b′d′=d,a′=2a,b′=b/2d+a*b=d+2a*(b/2)=d'+a'*b'\\d'=d,a'=2a,b'=b/2d+a∗b=d+2a∗(b/2)=d′+a′∗b′d′=d,a′=2a,b′=b/2原创 2022-06-08 16:30:40 · 240 阅读 · 0 评论 -
算法之迭代法求幂运算值
author:onceday date:2022年6月8日当n是偶数时,有bn=(b2)n/2b^n=(b^2)^{n/2}bn=(b2)n/2。令其表示成(a=1):a∗bn=a(b2)n/2a*b^n=a(b^2)^{n/2}a∗bn=a(b2)n/2再令:a∗bn=a′(b′)n′,a′=a,b′=b2,n′=n/2a*b^n=a'(b')^{n'},a'=a,b'=b^2,n'=n/2a∗bn=a′(b′)n′,a′=a,b′=b2,n′=n/2当n是奇数时,有a∗bn=ab∗(b原创 2022-06-08 16:27:53 · 595 阅读 · 0 评论 -
算法之求正弦值
author:onceday date:2022年6月8日当角度(弧度)很小时,其正弦值可以用sinx≈xsinx\approx xsinx≈x表示。再利用以下公式就可以计算得sinxsinxsinx的近似值了。sinx=3sinx3−4sin3x3sinx =3 sin\frac{x}{3}-4sin^3\frac{x}{3}sinx=3sin3x−4sin33x其时间复杂度是对数复杂度。...原创 2022-06-08 16:23:10 · 659 阅读 · 0 评论 -
算法之牛顿法求平方根+立方根
author:onceday date:2022年6月8日牛顿法基于以下几步来求出平方根:将上面的步骤写成代码如下:如何判断猜测值是否足够好呢?可以根据猜测值的平方与被开方数之差小于某个固定值,如0.0001;但是,这对于较大的数来说,不错,因为0.0001相对10,10000等来说是很小的。但对于0.001来说,其精度就太低了。因此可以使用百分比来衡量是否足够好,即监视猜测值在从一次迭代到下一次迭代的变化情况,当改变值相对于猜测值的比率很小时就结束。在这个基础上还可以实现求立方根的算法:...原创 2022-06-08 16:20:10 · 676 阅读 · 0 评论 -
算法之整钱找零
author:onceday date:2022年6月8日使用递归法解决非常简单,但效率有点低。现金a换成n种硬币的方式,分成两种情况考虑:依次递归计算则可得到最终的现金a换成n种硬币的方式。原创 2022-06-08 16:15:51 · 417 阅读 · 0 评论