(define make-rat
(lambda (n d)
(let ((n1 (if (or (and (> n 0) (< d 0)) (and (< n 0) (> d 0))) -1 1))
(d1 1)
(n2 (if (> n 0) n (* -1 n)))
(d2 (if (> d 0) d (* -1 d))))
(let ((g (gcd n2 d2)))
(cons (* n1 (/ n2 g)) (* d1 (/ d2 g)))))))
(define (print-rat x)
(newline)
(display (numer x))
(display "/")
(display (denom x)))
(define numer car)
(define denom cdr)
(define one-half (make-rat 1 2))
(print-rat one-half)
(print-rat (make-rat 2 -3))
(print-rat (make-rat -2 3))
(print-rat (make-rat -2 -3))
相关推荐
AD2S1210与DSP28335 SPI通信中的GPIO配置陷阱与解决
本文深入剖析了AD2S1210与DSP28335进行SPI通信时,因GPIO输入限定配置不当导致数据整体右移的典型问题。文章指出,错误地将MISO引脚配置为带采样周期的同步模式是根本原因,并提供了将输入选择限制正确设置为异步模式的解决方案。同时,总结了不同应用场景下GPIO输入限定的配置原则,为高速同步通信的稳定实现提供了关键指导。
2.1.1 例子:有理数的算术操作
2.1.1 例子:有理数的算术操作 假定我们要实现有理数的算术。我们要能够做加法,减法,乘法,和除法,以及测试 两个数是否相等。 让我们开始假定我们已经有一种方式从分子和分母组装起一个有理数。我们也假定 给定一个有理数,我们有一种方式抽取出它的分子和分母。让我们进一步地假定 组合子和选择子都是可用的,如下的程序: (make-rat <n> <d>) 返回一个有理数,它...
电脑版微信多开,最详细教程没有之一
首先桌面任意的位置右键新建文本文档输入如下代码: TASKKILL /F/IM WECHAT.EXE start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" ...
欢迎使用优快云-markdown编辑器
第一次写博客,还有点小激动呢(>_<)…sicp 10天前开始读,昨天刚把第一章读完,46道题也全部做完,收获颇大。 练习2.1 定义出make-rat的一个更好的版本,使之可以同时处理。有理数为正时, make-rat应该使其规范化,使它的分子分母都为正。如果为负则只让它的分子为负。这道题总体来说比较简单,在make-rat里进行一次判断就可以了。(define (make-rat n d
傅里叶变换实战:用Python手把手教你分析音频频谱(附完整代码)
本文详细介绍了如何使用Python实现傅里叶变换进行音频频谱分析,涵盖音频加载、预处理、FFT应用、频谱可视化及特征提取等关键步骤。通过实战案例和完整代码,帮助开发者掌握数字信号处理技术,特别适合音频分析和音乐信息检索领域的应用。
three.js 载入 3D 模型的方法
三维模型的加载器ColladaLoader模型加载器。GLTFLoader模型加载器。OBJLoader模型加载器。FBXLoader模型加载器。
Scheme语言直译为汉语(十)
一、有理数运算 接下来,我们要用一个有理数运算的例子来感受需要进一步抽象的程序要如何来设计。 作为开始,我们假定已经有了一种从分子和分母构造有理数的方法。并进一步假定, 如果有了一个有理数,我们有一种方法取得(选出)它的分子和分母。现在再假定有关的构造函数和选择函数都可以作为过程使用: (make-rat ) 返回一个有理数,其分子是整数<n>,分母是整数<d>。 (numer <x>) 返回有理数<x>的分子。 (denom <x>) 返回有
大聪明教你学Java | Seata 2.5 从下载到运行:全流程编译部署教程
Seata 2.5 版本带来了不少特性优化,但实际部署时却发现一个尴尬问题:全网找不到一篇完整覆盖「Git 源码下载→本地编译→环境配置→启动验证」的实操教程。作为一名踩遍无数坑才成功跑通的开发者,我深知这个过程的煎熬:Git 拉取源码后编译失败、依赖版本冲突、配置文件参数混乱、启动时端口占用或连接报错… 每一个坑都能耗费数小时排查。为了让后续开发者少走弯路,我将自己从0到1的完整实操经验整理成文,跟着步骤走即可成功运行 Seata 2.5.
SICP-练习2.1
【练习2.1】 请定义出make-rat的一个更好的版本,使之可以正确处理整数和负数。当有理数为正时,make-rat应当将其规范化,使它的分子和分母都是正的。如果有理数为负,那么就应只让分子为负。 【分析】 分子、分母的符号总共有四种情况: 1. 分子、分母都为正数, 2. 分子为负数,分母为正数。 这两种情况下,输入和输出一致。 3. 分子、分母都为负数, 4. 分子为正数,分
MTK-Android12开机应用自启需求-自定义原生Launcher3 主界面布局图标
MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标。添加一个属性定义即可,如下:这里自定义一个属性目的是为了在加载Launcher3启动时候从属性获取需要自启动应用的包名,可以扩展动态替换 自启动包名。这里有两种方案,要么在Launcher3里面实现,要么在系统服务里面在开机时候启动第三方一次。这里强烈建议在Launcher3中去实现,体验效果更好。// 第一步:定义属性,// 第二步:在onCreate 方法中获取属性并启动应用。
Python 安装 PyTorch(GPU)详细教程
本章教程,介绍如何安装PyTorch GPU版本的具体教程。
SICP 习题2.19 重写count-change 过程
(define (cc amount coin-values) (cond ((= amount 0) 1) ((or (< amount 0) (no-more? coin-values)) 0) (else (+ (cc amount (except-first-denomination coin-values)) (cc (
如何在 DevOps 管道中实现 AI?
AI与DevOps的融合(AIOps)正在重塑软件开发生命周期。本文系统阐述了AI在DevOps中的五大应用场景:智能监控、自动化测试、安全防护、CI/CD优化和事件管理,并提出了六步实施框架:痛点识别、工具选型、流程集成、智能监控、MLOps和治理合规。通过Netflix、Google等企业的实践案例,验证了AI在提升部署效率(降低40%故障率)、缩短问题解决时间(MTTR减少60%)方面的显著价值,同时指出数据质量、模型偏差等实施挑战。研究表明,战略性地
SICP 练习1.35使用不动点发寻找黄金分割律
前几个输出是书上介绍不动点法的几个样例(define tolerance 0.00001)(define (fixed-point f first-guess) (define (close-enough? v1 v2) (< (abs (- v1 v2)) tolerance)) (define (try guess) (let ((next (f guess)))
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
SICP 习题2.8 区间减法
我的想法是区间减法是a区间的每一个数减去b区间的每一个数,这些相减的结果在一个区间上。也就是x的下界-y的上界是最小的,x的上界-y的下界是最大的。其他所有结果都在这两个数之间。(define (add-interval x y) (make-interval (+ (lower-bound x) (lower-bound y)) (+ (upper-bound x) (upp
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
SICP 牛顿法求平方根
(define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt-iter (improve guess x) x)))(define (improve guess x) (average guess (/ x guess))) (define (average x y) (/ (+ x y) 2))(d
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
SICP 习题2.3 计算矩形面积和周长
我是用两个点表示的一个矩形,矩形的左下方的点和右上方的点。还有一种方法可以用一个左下方的点,一个长,一个宽就可以了。建立抽象屏障就是要求每个表示方法都能求出一个矩形的长和宽,根据这两个信息,就可以求出矩形面积和周长。(define make-rect cons) (define s-rect car) (define e-rect cdr)(define make-point cons) (defi
SICP 习题1.36 使用不动点发寻找x^x = 1000的根
修改fixed-point过程,在let里修改即可(define tolerance 0.00001)(define (fixed-point f first-guess) (newline) (display first-guess) (define (close-enough? v1 v2) (< (abs (- v1 v2)) tolerance)) (define (
SICP 换零钱问题
书上提到了迭代的算法,想到了完全背包,但是lisp功底太差,实现不了。(define (count-change amount) (cc amount 5))(define (cc amount kinds-of-coins) (cond ((= amount 0) 1) ((or (< amount 0) (= kinds-of-coins 0)) 0) (
SICP 习题2.42 八皇后问题
想不到第一次写八皇后问题是用的scm写代码的途中遇到一个错误,用let错了,用define对了,应该是编译器的原因,和nil差不多。(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr
SICP 习题2.33 用accumulate完成一些基本的表操作
这个accumulate比第一章完成更强大(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence)))))(define (map p sequence) (accu
SICP 练习1.7
这个是改进good-enough?函数,容易想到,guess (improve guess x) 分别是上一次迭代和下一次迭代的结果,那么就可以测量这个变化来改进good-enough?函数(define (sqrt-iter guess x) (if (good-enough? guess (improve guess x)) guess (sqrt-iter (improve
SICP 习题2.4 cons car cdr 用过程实现
(define (cons-a x y) (lambda (m) (m x y)))(define (car-a z) (z (lambda (p q) p)))(define (cdr-a z) (z (lambda (p q) q)))(define a (cons-a 1 2)) (newline) (display (car-a a)) (newline) (display (c
SICP 习题2.36 accumulate-n的实现
(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence)))))(define (accumulate-n op init seqs) (if (null? (car
SICP 练习2.34 多项式求值(horner规则)
(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence)))))(define (horner-eval x coefficient-sequence) (accum
SICP 习题2.7 实现区间的lower-bound 和 upper-bound
lower-bound 就是 carupper-bound 就是 cdrmake-interval 需要保证lower-bound 小于 upper-bound(define (add-interval x y) (make-interval (+ (lower-bound x) (lower-bound y)) (+ (upper-bound x) (upper-bound
146



被折叠的 条评论
为什么被折叠?



