第11章函数式程序设计语言-程序设计语言原理.pptVIP

  • 2
  • 0
  • 约1.29万字
  • 约 50页
  • 2017-12-20 发布于天津
  • 举报

第11章函数式程序设计语言-程序设计语言原理.ppt

第11章函数式程序设计语言-程序设计语言原理.ppt

5.3.5 输出问题 利用数据对象内部原有的顺序 结构对象是第一类对象, 语言支持的任何形式(交互、非交互)的输出都可以用在表和元组上。Miranda就是用无限表动态实现的 无限表尾不表示任何值, 它是函数对象, 每当调用到它时, 它按规定计算表头值, 并构造 一新的函数对象放在表尾, 以便再展其它项, 它就是新的无限表尾的头, 这个过程一直延续到需要的表长已达到。 输入输出流就是一个值的无限表, 每次处理输入流一个新值就附在表尾并为程序访问。同样, 也用无限表模型输出流。 5.4 函数式语言Miranda 简单的Miranda手本 Miranda λ演算 sq n = n * n sq = λn. * n n z=sq x/sq y z=/(sq x)(sq y) Miranda的基本类型有字符(char类型, 加单引号的字母), 真值(bool类型, 值为True和False)和数(num 类型, 包括整数、实数), 数据结构只有表和元组, 串是字符表 11.4.1 数据结构 元组(tuple) 树类型定义 tree::= Leaf Integer | Node tree tree [1] leaf1 = (Leaf 3) [2] tree1 = (Node leaf1 (Node (Leaf 17) (Leaf 49))) [3] 3 3 17 49 leaf 1 tree 1 leaf 1 第[2]行执行后 第[3]行执行后 多态函数定义及调用 设函数 max_tree 为求树中叶子值最大 max_tree (Leaf ldata) = ldata [1] max_tree (Node n1 n2) = max1, max1 max2 [2] = max2, max2 max1 [3] = max1, otherwise where max1 = (max_tree n1) [4] max2 = (max_tree n2) [5] 如有应用: (max_tree leaf1) //结果值为3, leaf1用上例 (max_tree tree1) //结果值为49,tree1用上例 表(list) Miranda表的表示法 [ ] //空表 [1..n] //1到n,域表示 odd_number = [1,3,..100] //1到100内奇数表,头两项及最后项必写 eleven_up = [11...] //10以上, 无限表表示 evens = [10,12...100] //10以上偶数表至100,头两项及最后项必写 evens_up = [12,14...] //10以上偶数无限表, week _days = [“Mon”,“Tue”,“Wed”,“Thur”,“Fri”] //五个串值的表 5.4.2 内定义操作 Miranda定义了常规的算术运算符(+、-、*、/、div、mod)并按中缀表示使用。故内定义了一些有用的表操作: L1 ++ L2 // 表L2并接到表L1的末尾 item:List // 将项item加到表List的头前 List ! n // 从表List中选取第n项 L1 -- L2 // 从表L1中剔出L2的值 #List //返回表List的项(基)数 5.4.3 定义函数 Miranda把函数定义叫方程(equation)。 例: 斐波那契数的函数定义, 用卫式表达式实现递归 Fibonacci n = 1, n=0 = 1, n=1 = Fibonacci (n-1)+Fibonacci (n-2

文档评论(0)

1亿VIP精品文档

相关文档