算术包实例:符号代数练习题

练习2.87 以下将对多项式进行算术包构建:

点击查看代码
;;通用操作
(define (add x y) (apply-generic 'add x y))
(define (mul x y) (apply-generic 'mul x y))
(define (=zero? x) (apply-generic '=zero? x))
;;多项式运算中涉及的算术操作包
;;数字部分
(define (install-scheme-number-package)(define (tag-args op)(lambda (x y) (attach-tag 'scheme-number (op x y))))(put 'add '(scheme-number scheme-number) (tag-args +))(put 'mul '(scheme-number scheme-number) (tag-args *))(put '=zero? '(scheme-number)(lambda (x) (= x 0))))
;;符号代数部分
(define (install-polynomial-package)(define (number->poly variable n)(make-poly variable (adjoin-term (make-term 0 n) (the-empty-termlist))))(define (tag x) (attach-tag 'polynomial' x))(define (put-op name op)(put 'name '(polynomial polynomial)(lambda (x y) (tag (op x y))))(put 'name '(polynomial scheme-number)(lambda (x y) (tag (op x (number->poly (variable x) y)))))(put 'name '(scheme-number polynomial)(lambda (x y) (tag (op (number->poly (variable y) x)) y))))(put-op 'add add-poly)(put-op 'mul mul-poly)(put '=zero? 'polynomial =zero-poly?)'done)
;;对符号代数中需要的函数进行说明
(define (polynomial? p)(and (pair? p) (eq? (car p) 'polynomial)))
(define (make-poly variable term-list)(cons 'polynomial (cons variable term-list)))
(define (variable? p) (symbol? p))
(define (same-variable? p1 p2)(and (variable? p1) (variable? p2)(eq? p1 p2)))
(define (variable p)(cadr p))
(define (term-list p)(cddr p))
(define (add-poly p1 p2)(if (same-variable? (variable p1) (variable p2))(make-poly (variable p1)(add-terme (term-list p1)(term-list p2)))(error "Polys not in same var -- ADD" (list p1 p2))))
(define (mul-poly p1 p2)(if (same-variable? (variable p1) (variable p2))(make-poly (variable p1)(mul-terme (term-list p1)(term-list p2)))(error "Polys not in same var -- MUL" (list p1 p2))))
(define (add-terms L1 L2)(cond ((empty-termlist? L1) L2)((empty-termlist? L2) L1)(else(let ((t1 (first-term L1))(t2 (firet-term L2)))(cond ((> (order t1) (order t2))(adjoin-term t1 (add-terms (rest-terms L1) L2)))((> (order t2) (order t1))(adjoin-term t2 (add-terms L1 (rest-terms L2))))(else (adjoin-term (make-term (order t1) (add (coeff t1) (coeff t2)))(add-terms (rest-terms L1) (rest-terms L2)))))))))
(define (mul-terms L1 L2)(if (empty-termlist? L1)(the-empty-termlist)(add-terms (mul-terms-by-all-terms (first-term L1) L2)(mul-terms (rest-terms L1) L2))))
(define (mul-terms-by-all-terms t1 L)(if (empty-termlist? L)(the-empty-termlist)(let ((t2 (first-term L)))(adjoin-term(make-term (+ (order t1) (order t2))(mul (coeff t1) (coeff t2)))(mul-terms-by-all-terms t1 (rest-terms L))))))
(define (adjoin-term term term-list)(if (=zero? (coeff term))term-list(cons term term-list)))
;;零的判断
(define (=zero-poly? poly)(define (coeff-all-zero? term-list)(if (empty-termlist? term-list) #t(if (=zero? (coeff (first-term term-list)))(coeff-all-zero? (rest-of-terms term-list))#f)))(coeff-all-zero? (term-list poly)))
(define (first-term term-list) (car term-list))
(define (rest-of-terms term-list) (cdr term-list))
(define (make-term oredr coeff)(cond oredr coeff))
(define (order term)(car term))
(define (coeff term)(cadr term))
(define (empty-termlist? term-list)(null? term-list))

练习2.88 扩充算术包,加上多项式的减法。

点击查看代码
;;整数包中添加:
(put 'neg '(scheme-number) (lambda (x) (tag (- x))))
;;多项式中添加:
(put-op 'sub sub-poly)
(put 'neg '(polynomial) (lambda (x) (tag (neg-poly x))))
;;定义减法:
(define (sub-poly p1 p2)(add p1 (neg p2)))
;;通过一个通用的取负操作实现减法
(define (neg-poly p)(make-poly (variable p)(neg-term (term-list p))))
(define (neg-term L)(if (empty-termlist? L)(the-empty-termlist)(let ((t (first-term L)))(adjoin-term (make-term (order t) (neg (coeff t)))(neg-term (rest-of-terms L))))))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

导师严选9个一键生成论文工具,专科生毕业论文轻松搞定!

导师严选9个一键生成论文工具,专科生毕业论文轻松搞定! AI 工具如何让论文写作变得轻松高效 在当前的学术环境中,越来越多的专科生开始借助 AI 工具来辅助完成毕业论文。这些工具不仅能够帮助学生快速生成内容,还能在降低 AIGC 率…

大模型部署测试

目录查看模型路径压测命令安装压力测试工具或者用官方示例 Python 脚本实时监控显存/GPU使用率或者查看特定进程top 或 htop 实时查看或者更精确 查看模型路径 curl http://127.0.0.1:8000/v1/models {"object&qu…

从 EKF 到粒子滤波:定位技术的奇妙之旅与 QT 仿真实现

ekf 扩展卡尔曼滤波定位 qt仿真程序 粒子滤波定位在机器人定位与导航的领域中,扩展卡尔曼滤波(EKF)和粒子滤波是两种极为重要的算法,它们各有千秋,在不同场景下发挥着关键作用。今天咱就结合 QT 仿真程序,…

国产化建设:从“可替代”走向“可控可演进”

一、什么是“国产化”?不是换国产品牌这么简单很多人对“国产化”的理解停留在:把国外软件换成国产软件 把国外服务器换成国产服务器 把国外数据库换成国产数据库但真正的国产化并不是“换品牌”,而是三个层级的建设:1️⃣ 可替代…

PHP vs Python:开发者终极选择指南

性能比较PHP通常用于服务器端脚本,尤其在Web开发中表现优异,执行速度快,尤其在处理HTTP请求时效率高。Python作为通用语言,执行速度略慢于PHP,但因其易读性和丰富的库支持,适用于更广泛的场景,如…

想在 Java 八股文面试中脱颖而出?这1000 道互联网大厂面试题必不可少!

国内的互联网面试,恐怕是现存的、最接近科举考试的制度。以美国为例,北美工程师面试比较重视算法(Coding),近几年也会加入 Design 轮(系统设计和面向对象设计 OOD)和 BQ 轮(Behavior…

9个高效降aigc工具推荐,本科生必看!

9个高效降aigc工具推荐,本科生必看! AI降重工具:论文写作的隐形助手 在当前学术环境中,越来越多的高校开始采用AIGC检测系统来评估论文的原创性。对于本科生而言,如何在保证内容质量的同时有效降低AI生成痕迹&#xff…

【毕业设计】基于django定制化ERP系统APP小程序(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

啃完阿里老哥这套Java面试八股文后,成功收获蚂蚁 offer

我国的八股文确实是独树一帜。以美国为例,北美工程师面试比较重视算法(Coding),近几年也会加入 Design 轮(系统设计和面向对象设计 OOD)和 BQ 轮(Behavioral question,行为面试问题&…

不会建模也能做 3D?2D 原画“充气”变动画的逃课流

对于 2D 原画师来说,“伪 3D 动态” 是最头疼的需求。 想让纸片人转身、蠕动、膨胀,传统方法是画几十张序列帧,不仅还要懂透视,还得保证体积不崩,工作量堪比手绘动画。现在是 2026 年。 面对这种“2D 想要 3D 魂”的需…

致并肩前行的你:一封来自近屿智能的信

大家好。每当招聘季来临,空气中都弥漫着复杂的情绪。我们看到了那些令人羡慕的佳话,也听闻了许多现实的焦虑。我观察到这样一篇帖子,这同时也抛出了一个难题:当一方加速前进,而另一方仍在原地,那份曾经的亲…

源自新西兰的天然馈赠:Newo纽渥有机娟姗鲜牛奶,重新定义家庭健康饮奶标准 - 行业调研院

在追求品质生活的今天,一杯牛奶的选择,关乎的不仅是每日的营养补给,更是一个家庭对健康、纯净与安心生活的承诺。当我们将目光投向全球优质奶源带,来自新西兰怀卡托黄金海岸的Newo纽渥有机娟姗鲜牛奶,正以其无可比…

“微型应用“兴起:非开发者自主开发应用而非购买现成产品

Rebecca Yu花了七天时间编写了她的餐厅推荐应用。她厌倦了在群聊中因为无法决定去哪里吃饭而产生的选择困难症。凭借决心、Claude和ChatGPT的帮助,Yu决定从零开始构建一个餐厅应用——一个能够基于她和朋友们的共同兴趣推荐餐厅的应用。"一旦随性编程应用出现后…

day154—回溯—分割回文串(LeetCode-131)

题目描述给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。示例 1:输入:s "aab" 输出:[["a","a","b"],["aa",&qu…

历年CSP-J初赛真题解析 | 2019年CSP-J初赛

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

OpenAI和Anthropic竞相布局医疗健康领域,AI医疗浪潮已至

AI公司正在快速向医疗健康领域聚集。仅在过去一周内,OpenAI收购了健康科技初创公司Torch,Anthropic推出了Claude for Health产品,而由萨姆奥特曼支持的Merge Labs以8.5亿美元估值完成了2.5亿美元种子轮融资。资金和产品正大量涌入健康和语音A…

day155—回溯—组合(LeetCode-77)

题目描述给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]示例 2:输入:n 1, k 1 …

探索机器视觉贴片机控制软件系统源码

机器视觉贴片机控制软件系统源码 机器视觉贴片机控制系统源码2套(全套源程序和图纸) 软件界面图片:嘿,各位技术小伙伴们!今天咱来唠唠机器视觉贴片机控制软件系统源码这有意思的玩意儿,而且咱手里还握着2套全套源程序和图纸呢&am…

实用指南:零基础学AI大模型之MultiQueryRetriever多查询检索全解析

实用指南:零基础学AI大模型之MultiQueryRetriever多查询检索全解析2026-01-19 22:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !…