第五章函数式程序设计语言内容摘要:
)=E1 in E2 ≡ let fp=E1 in let x1=first p in let x2=second p in . . . let xn=n_th p in E2 Lambda演算 关于 Lambda演算 表达式 自由变量(计算一个 表达式的自由变量集合 ) 替换(计算) 变换规则 (三种变换) 归约 范式(性质及其计算) 关于 Lambda演算 表达式 一个 表达式 由变量名、抽象符号 , .以及括号等符号构成, 其语法为: 表达式 ::= 变量名 | 表达式 表达式 | 变量名 . 表达式 | ( 表达式 ) 关于 Lambda演算 变换规则 (三种变换) 变换:设 E是 表达式, x是变量,则称下面变换为 α变换(其中 y不在 FV( )中) 〉 y.[y/x] E 变换:设 ()和 E0为 表达式,则称下面变换为 β变换(称 β变换规则的左部表达式为 β基) ()E0 E[E0/x] 变换:假设 ,且满足条件 xFV(M),则称下面变换为 η变换 : ( x) M 关于 Lambda演算 自由变量(计算一个 表达式的自由变量集合 ) 表达式 E中变量名 x的一次出现称为 自由出现 ,如果 E中任何一个形如 x. E’的子表达式包含该出现; y (x y. y (x. x y ) ) (z (x. x x) )的自由变量集合 {y, z} 替换(计算) 设 E和 E0是表达式, x是变量名, 替换 E[E0/x]是表示 把 E中的所有 x的自由出现替换成 E0。 需要明确变量的自由出现 计算规则 ( y. x+y) [y/x] = z. y+z 关于 Lambda演算 范式(性质及其计算) 假设 E是一个表达式,且其中没有任何一个归约基,则称该表达式为 范式。 范式 的存在性:如 果有范式,则最左归约法一定能求出范式。 范式 的唯一性:如 果有范式则在 变换下一定唯一。 函数式描述方法 关于函数式描述方法 • 函数式语言的特点 – 引用透明性;高阶性;模式匹配;并行性; • 函数式语言的组成部分 – 程序结构 – 类型及其操作 – 表达式 • 用函数式语言来描述算法(解释器) – 函数空间 – 函数定义(方程) 关于函数式描述方法 • 函数式语言的组成部分 – 程序结构 • 函数定义 • 目标表达式 – 类型及其操作 – 标准类型 集合类型 – 幂集类型 元组类型 – 联合类型 序列类型 – 函数类型 递归类型 – 抽象类型 关于函数式描述方法 • 函数式语言的组成部分 – 表达式 •非 let表达式(常量,变量, 表达式,条件表达式, 以及各种操作) •let表达式 let x = E’ in E •letrec表达式 letrec x = E1 in E •在表达式中增加类型说明 关于函数式描述方法 • 用函数式语言来描述算法 – 函数空间: INT* INT BOOL – 函数定义(方程) lookup L a = (null L→FALSE , a=hd L→TRUE , lookup (tl L) a ) 函数式语言怎样克服命令式语言的缺点 • 消除赋值 赋值语句在过程语言中起什么作用。 在函数式 语言中取消会有什么问题: [1] 存储计算子表达式的中间结果。 [2] 条件语句的重要组成。 [3] 用于循环控制变量。 [4] 处理复杂数据结构 (增删改某个成分 )。 解决办法 [1]: 保留全局量、局部量 (符号名 )以及参数名。 [2]: 用条件表达式代替条件语句,其返回值通过 参数束定或 where子句束定于名字 [3]:函数式语言都要定义表数据结构, 因为归约 和递归计算在表上很方便。 对整个表操作实 则是隐式迭代。 不用循环控制变量。 对于 顺序值也都用表写个映射函数即可隐式迭代。 部分达到作用 [3], 其它显式循环要用递归。 [4]:禁止赋值意味着数据结构一旦创建不得修改 ,故采用如下函数式语言结构数据修改方式 A B C E H G D F’ B’ C A F J I 以递归代替 while_do 组织仿真的要点是把递归函数体写入条件表达式。 循环终止条件是条件测试部分, 函数如有返回值放在 then部分, 递归函数体放在else部分, 如果不需返回值则取消一部分(else)。 消除顺序 一旦语义相关无法传递数据, 非得写成嵌套函数不可 (返回值自动束定到外套函数的变元上 ) 例 :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 s )))) //仍有顺序但在一个 //表达式内。 自左至右处理即隐式顺序。 Miranda实现: Answere a b = (a b c s ) where s= sin (c* c) c= a+b //多么清晰, 全然没有顺序 序 • 用懒求值代替顺序 • 利用卫式进一步消除顺序性 Miranda的卫式表达式 gcd a b= gcd (ab) b, ab = gcd a (ba), ab = a, a=b LISP的条件选择 ( define GCD (a b) ( cond (( greaterp a b) (GCD ((diference a b ) b))) ((Lessp a b) (GCD (a (。第五章函数式程序设计语言
相关推荐
宾朋, 堪称无以伦比, 它为我们中国人追逐的百年奥运梦想, 划上了完美句点。 “同一个世界,同一个梦想 ……” 的奥运口号在神洲大地回响。 那“中国印 舞动的北京”,充分展现了中国的神韵与活力。 五个可爱的福娃,也向全世界发出“北京欢迎您”的邀请。 这届奥运会是全球体坛的盛会,也是中外文化交流的最好契机。 下列说法中正确的是( ) ,又要向世界展示、传播中华民族的优秀文化 ,可以相互替代
女”、“舞神”。 98年多才多艺的她还自 编自导自演了电影 《 太阳鸟 》 ,并在 蒙特利尔国际电影节上荣获评委会大 奖。 最近她出演了内地版 《 射雕英雄 传 》 的“梅超风”,成为该剧最大买点。 唯她能用那种美得令人窒息的肢体语言表达天籁与人籁,从而启发了我们对艺术无限可能性的理解和宽容。 她的舞蹈因为纯粹而永不过时,因为独创而弥足珍贵,借助电视转播而曲高和不寡。
活,用户可根据需要选择是否在硬件门起动时刻,调用硬件中断组织块 OB40中的程序。 1.硬件设置 将通道的硬件参数设置好以后,按 OK键,如果还需要设置其它通道,可以再次双击 count,重新进入计数器属性对话框对其它通道进行设置。 将组态好的硬件数据进行保存编译( save and pile),并下载到 PLC中,完成硬件设置工作。 要想在相应的通道上获得脉冲,除了硬件设置以外
属性应设置成要复制的文件的总数。 Value 属性表示应用程序在完成操作的过程中的进度。 由于控件中显示的栏是块的集合,所以由 ProgressBar 显示的值只是大约等于 Value 属性的当前值。 根据 ProgressBar 的大小, Value 属性确定何时显示下一个块。 26 菜单 • Windows 窗体上的菜单是使用 MenuStrip 对象创建的,该对象是一个 MenuItem
不二阶酚醛树脂的反应类似。 16 酚醛树脂的固化及影响因素 热塑性酚醛树脂固化的影响因素 六次甲基四胺的 用量 用量丌足不用量过多 树脂中游离酚和水 含量 凝胶时间 制品性能 温度、压力 固化促进剂 润滑剂 17 酚醛树脂的固化及影响因素 18 1888年,达尔文曾给科学下过一个定义:“科学就是整理事实,从中収现规律,作出结论”。 科学是从观察、研究
黏 液 体壁的毛细血管 全 身 各 处细 胞 氧气 二氧化碳 氧气 氧气 二氧化碳 二氧化碳 蚯蚓的呼吸过程 蚯蚓视频 四、蚯蚓 (三)运动: 注意其身体粗细长短变化怎么产生。 用什么词可描述它的运动。 蠕动 观察蚯蚓的运动视频 四、蚯蚓 (三)运动 : 蠕动 比较它在光滑玻璃板和