- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
11.2.6 增强λ演算 只用最底层λ演算是极其复杂的。用高层命名函数,语义清晰。不仅如此,保留一些常见关键字,语义更清晰。例如,我们可以定义一个if_then_else为名的函数:if_then_else =λp.λm.λn.p m n,当p为真时, 执行m否则为n。我们先验证其真伪。 例:当条件表达式为真时if_then_else函数的归约 (if_then_else) T M N = (λp. λm. λn. p m n) T M N = (λm.λn. ( T m n))M N = (λm. λn. (λx.λy.x) m n) M N = (λm. λn. (λy.m) n) M N = (λm. λn. m) M N = (λn. M) N =M if表达式 可保留显式if-then-else形式: (if_then_else) E1 E2 E3= if E1 then E2 else E3 其中E1, E2, E3为λ表达式。 Let/where表达式 如果有高阶函数: (λn. multiply n (succ n)) (add i 2 ) = multiply (add i 2) (succ (add i 2)) //n 和 add i 2置换变元得 = multiply n (succ n) // let n = add i 2 in let a = b in E ≡ (λa. E) b ≡ E where a=b (λf. E2) (λx.E1) = let f = λx.E1 in E2 = let f x = E1 in E2 其中形如f=λx.E1的λx. 可移向左边为f x = E1 。 如: sqr = λn. multiply n n //整个是λ函数表达式 sqr n = multiply n n //两应用表达式也相等 let表达式在ML. LISP中直接采用, Miranda用where关键字使程序更好读, let直到E完结构成一个程序块。Miranda只不过把where块放在E之后. 元组表达式 一般情况下n元组是p=(x1,x2,…xn), 建立在p上函数有: let f(x1,x2,…xn)=E1 in E2 ≡ let fp=E1 in let x1=first p in let x2=second p in . . . let xn=n_th p in E2 11.3 函数式语言怎样克服命令式语言的缺点 11.3.1 消除赋值 赋值语句在过程语言中起什么作用。 在函数式 语言中取消会有什么问题: [1] 存储计算子表达式的中间结果。 [2] 条件语句的重要组成。 [3] 用于循环控制变量。 [4] 处理复杂数据结构(增删改某个成分)。 Miranda解决办法 [1]:保留全局量、局部量(符号名)以及参数名。 [2]:用条件表达式代替条件语句,其返回值通过 参数束定或where子句束定于名字 [3]:函数式语言都要定义表数据结构, 因为归约 和递归计算在表上很方便。 对整个表操作实 则是隐式迭代。 不用循环控制变量。 对于 顺序值也都用表写个映射函数即可隐式迭代。 部分达到作用[3], 其它显式循环要用递归。 [4]:禁止赋值意味着数据结构一旦创建不得修改,故采用如下函数式语言结构数据修改方式 A B C E H G D F’ B’ C A F J I 11.3.2 以递归代替while_do 组织仿真的要点是把递归函数体写入条件表达式。 循环终止条件是条件测试部分, 函数如有返回值放在then部分, 递归函数体放在else部分, 如果不需返回值则取消一部分(else)。 11.3.3 消除顺序 一旦语义相关无法传递数据, 非得写成嵌套函数不可(返回值自动束定到外套函数的变元上) 例:pascal实现: c:=a+b; s:=sin(c * c); 。 write(a,b, c, s); //上面计算不进行是无法打印 //的逻辑上要有顺序。 LISP 实现: (print (let ((c(+ a b))) let ((s (sin (* c c)))) list a b c
您可能关注的文档
最近下载
- 幼儿园多功能厅和安全设施采购 投标方案(技术方案).doc
- 2025广东江门市江海区建设工程质量检测站合同制工作人员招聘5人笔试备考题库及答案解析.docx VIP
- 第5课用发展的观点看问题教学设计-2023-2024学年中职高教版(2023)哲学与人生.docx VIP
- ASME B1.15-1995 统一英寸螺纹(UNJ螺纹形式).pdf VIP
- 个人二手车买卖合同协议书(标准版).doc VIP
- 普兰店市城市主干路施工组织设计(投标)_secret.doc
- 2024年福建省福州市鼓楼区华大街道招聘社区工作者真题及参考答案详解一套.docx VIP
- 2024年福建省福州市鼓楼区华大街道招聘社区工作者真题及参考答案详解.docx VIP
- 2025年新北师大版数学二年级上册全册教案.pdf
- 第5课 用发展的观点看问题 教学设计-2024-2025学年中职思想政治高教版(2023)哲学与人生.docx VIP
文档评论(0)