【SICP练习】152 练习4.8

本文深入探讨了Scheme语言中的一种特殊形式——Named Let,详细解释了其语法结构和使用方式,并通过实例展示了如何将它转换为普通过程。此外,还提供了代码实现,帮助读者理解Named Let的工作原理。

练习4-8

原文

Exercise 4.8. “Named let” is a variant of let that has the form

(let <var> <bindings> <body>)

The and are just as in ordinary let, except that is bound within to a procedure whose body is and whose parameters are the variables in the . Thus, one can repeatedly execute the by invoking the procedure named . For example, the iterative Fibonacci procedure (section 1.2.2) can be rewritten using named let as follows:

(define (fib n) (let fib-iter ((a 1) (b 0) (count n)) (if (= count 0) b (fib-iter (+ a b) a (- count 1)))))

Modify let->combination of exercise 4.6 to also support named let.

分析

希望大家还是有事没事看看原文啦,我才发现见过很多次的modify原来是修改的意思。

关于named let的一些比较什么的,大家可以看这里:【Scheme归纳】3 比较do, let, loop

从题目的代码中我们也可以看到named-let的名字可以用cadr来取出,也就是书中的fib-iter。而body部分从以下代码中也可以看出来得用3个cdr和1个car。

(let <var> <bindings> <body>)

而parameter题中已经说了是binding中变量,取出binding用caddr,而取出题目示例中的a、b和count等则用map和car即可。取出题目示例中的1、0和n则用map和cadr。

那么接下来我们还需要将named-let转换成函数,用list来构造这些就好,首先当然是’define,然后再用cons把name和parameter构造在一起,最后就是body啦。

当然了,在let->combination中我们需要判断是不是named-let?,那么怎么判断呢,先判断是否是let?,再判断expr的名字是不是符号(symbol?)。

最后就可以写let-combination啦。首先用写好的named-let?谓词来进行判断expr,然后为真的话就调用第257页的sequence->exp函数,否则就用cons来继续构造了。

代码


(define (named-let-name expr) (cadr expr))

(define (named-let-body expr) (cadddr expr))

(define (named-let-parameters expr) (map car (caddr expr)))

(define (named-let-exp expr) (map cadr (caddr expr)))

(define (named-let? expr) (and (let? expr) (symbol? (cadr expr))))  

(define (named-let->func expr) (list 'define (cons (named-let-name epxr) (named-let-parameters expr)) (named-let-body expr)))

(define (let->combination expr) (if (named-let? expr) (sequence->exp (list (named-let->func expr) (cons (named-let-name expr) (named-let-exp expr)))) (cons (make-lambda (let-vars expr) (list (let-body expr))) (let-exp expr))))



为使本文得到斧正和提问,转载请注明出处:
http://blog.youkuaiyun.com/nomasp

版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.youkuaiyun.com/nomasp

转载于:https://my.oschina.net/nomasp/blog/503319

[混合波束成形]基于深度学习的大规模天线阵列混合波束成形设计(Matlab代码、Python代码实现)内容概要:本文介绍了基于深度学习的大规模天线阵列混合波束成形的设计方法,并提供了Matlab和Python代码实现。该设计聚焦于5G及未来通信系统中的关键使能技术——混合波束成形,通过深度神经网络对复杂的信道状态信息(CSI)进行高效估计与波束成形矩阵优化,在保证通信性能的同时降低硬件成本与计算开销。文中详细阐述了算法模型构建、训练流程设计及仿真验证过程,展示了深度学习在通信物理层中的深度融合应用,尤其适用于毫米波大规模MIMO系统场景。; 适合人群:具备通信工程、信号处理或人工智能基础知识的研究生、科研人员及从事5G/6G技术研发的工程师;熟悉Matlab或Python编程,对深度学习和无线通信系统有一定实践经验者更为适宜。; 使用场景及目标:①研究深度学习在无线通信物理层中的应用,特别是CSI反馈压缩与波束成形优化;②复现先进混合波束成形算法,提升系统频谱效率与能效;③为学术论文复现、课题研究或工程项目开发提供可运行的代码参考与技术路线支持。; 阅读建议:建议读者结合文中提供的代码逐模块分析,重点关注神经网络结构设计与通信约束条件的融合方式,同时可扩展尝试不同网络架构或信道模型以深化理解。
STM32电机库无感代码注释无传感器版本龙贝格观测三电阻双AD采样前馈控制弱磁控制斜坡启动内容概要:本文档为一份名为《STM32电机库无感代码注释无传感器版本龙贝格观测三电阻双AD采样前馈控制弱磁控制斜坡启动》的技术资料,主要围绕基于STM32的永磁同步电机(PMSM)无传感器矢量控制系统的实现展开,详细注解了采用龙贝格观测器(Luenberger Observer)进行转子位置与速度估算的控制算法,涵盖三电阻采样、双通道ADC数据采集、电流环前馈补偿、弱磁扩速控制及斜坡启动策略等关键技术模块。该文档不仅提供了完整的控制逻辑说明,还深入解析了底层代码实现,适用于高精度、高性能电机控制系统的开发与学习。; 适合人群:具备一定嵌入式开发基础和电机控制理论知识的电气工程、自动化、机电一体化等相关专业的高校师生、科研人员及从事电机驱动开发的工程师;尤其适合希望深入理解无传感器电机控制算法及STM32平台实现的技术人员。; 使用场景及目标:①学习和掌握基于龙贝格观测器的无传感器电机控制原理与实现方法;②理解三电阻采样、双AD同步采集、前馈控制、弱磁控制和斜坡启动等关键环节的设计思路与代码实现;③用于高校课程设计、毕业设计、科研项目开发或工业级电机控制器的研发参考。; 阅读建议:建议读者结合STM32开发环境和电机控制实验平台进行代码阅读与调试,配合电机控制理论教材逐步理解各模块功能,重点关注观测器设计、坐标变换、PI调节器参数整定及ADC采样时序等核心部分,以实现理论与实践的有效结合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值