尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

scheme 符号求导部分 练习2.57-2.58

scheme 符号求导部分 练习2.57-2.58
📅 发布时间:2026/6/22 18:56:39

练习2.57 扩充求导程序,使其能处理任意项的和与乘积

点击查看代码
;原求导程序
(define (deriv exp var)(cond  ((number? exp) 0) ((variable? exp)(if (same-variable? exp var) 1 0))((sum? exp)(make-sum (deriv (addend exp) var)(deriv (augend exp) var)))((product? exp)(make-sum(make-product (multiplier exp) (deriv (multiplicand exp) var))(make-product (multiplicand exp) (deriv (multiplier exp) var))))(else (error "unknown expression type" exp))))
;对sum的修改
(define (make-sum-list lst)(define (make-sum-impl a1 a2)(cond ((=number? a1 0) a2)((=number? a2 0) a1)((and (number? a1) (number? a2) (+ a1 a2)))(else (list '+ a1 a2))))(if (= (length lst) 2)(make-sum-impl (car lst) (cadr lst))(make-sum-impl (car lst) (make-sum-list (cdr lst)))))
(define (make-sum a1 a2)(make-sum-list (list a1 a2)))
(define (sum? x)(and (pair? x) (eq? (car x) '+)))
(define (addend s) (cadr s))
(define (augend s)(let ((lst (cddr s)))(if (= (length lst) 1)(car lst)(make-sum-list lst))))
;对乘法的修改
(define (make-product-list lst)(define (make-product-impl m1 m2)(cond ((or (=number? m1 0) (=number? m2 0)) 0)((=number? m1 1) m2)((=number? m2 1) m1)((and (number? m1) (number? m2) (* m1 m2)))(else (list '* m1 m2))))(if (= (length lst) 2)(make-product-impl (car lst) (cadr lst))(make-product-impl (car lst) (make-product-list (cdr lst)))))
(define (make-product a1 a2)(make-product-list (list a1 a2)))
(define (product? x)(and (pair? x) (eq? (car x) '*)))
(define (multiplier s) (cadr s))
(define (multiplicand s)(let ((lst (cddr s)))(if (= (length lst) 1)(car lst)(make-product-list lst))))

练习2.58 将前缀表达式修改为中缀表达式

点击查看代码
(define (deriv exp var)(cond ((number? exp) 0)((variable? exp)(if (same-variable? exp var) 1 0))((sum? exp)(make-sum (deriv (addend exp) var)(deriv (augend exp) var)))((product? exp)(make-sum(make-product (multiplier exp)(deriv (multiplicand exp) var))(make-product (deriv (multiplier exp) var)(multiplicand exp))))(else(error "unknown expression type -- DERIV" exp))))
(define nil '())
(define (variable? s) (symbol? s))
(define (=number? exp num) (and (number? exp)(= exp num)))
(define (same-variable? v1 v2) (and (variable? v1)(variable? v2)(eq? v1 v2)))
;加法部分
(define (sum? x) (and (pair? x) (eq? (find-symbol x) '+)))
(define (make-sum a1 a2)(cond ((=number? a1 0) a2)((=number? a2 0) a1)((and (number? a1)(number? a2)) + a1 a2)(else (list a1 '+ a2))))
(define (find-symbol x)(cond ((memq '+ x) '+)((memq '* x) '*)(else 'unknown )))
(define (take-until symbol x)(cond ((null? x) nil)((equal? (car x) symbol) nil)(else (cons (car x) (take-until symbol (cdr x))))))
(define (simplify lst)(if (and (pair? lst)(= (length lst) 1))(car lst)lst))
(define (addend x)(simplify (take-until '+ x)))
(define (augend x)(simplify (cdr (memq '+ x))))
;乘法部分
(define (product? x)(and (pair? x)(eq? (find-symbol x) '*)))
(define (make-product a1 a2)(cond ((=number? a1 1) a2)((=number? a2 1) a1)((and (number? a1)(number? a2)) * a1 a2)(else (list a1 '* a2))))
(define (multiplier x)(simplify (take-until '* x)))
(define (multiplicand x)(simplify (cdr (memq '* x))))

相关新闻

  • 2025年移动机器人推荐指南:猎户星空等10大品牌技术对比与选型攻略 - 资讯焦点
  • 软件测试必问的10个经典面试题(附带答案)
  • 食品斩拌机生产厂家怎么选?斩拌机厂家推荐与源头斩拌机厂家排名全解析 - 工业品牌热点

最新新闻

  • 视觉测试不是截图比对:Web应用UI一致性的三层工程化实践
  • 嵌入式调试器核心命令实战:从断点设置到内存操作与自动化脚本
  • (2026最新)杭州防水补漏正规公司甄选推荐:漏水检测维修-暗管漏水精准定位检测漏水点-卫生间/厨房/屋顶/阳台/渗漏水维修-本地人必选的正规测漏公司 - 即刻修防水
  • 卡立方000000源头邀请码全域权限深度全解:平台背景、底层架构、显性+隐形权益、账号终身规则完整剖析 - 卡立方平台官方号
  • Ubuntu 20.04 配置 MongoDB 远程访问的三层安全实践
  • 本地优先混合检索系统vstash:融合语义与关键词搜索,实现数据隐私与智能搜索兼得

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号