命令式v声明式程序设计 命令式程序设计(imperative p programming 强调对“如何做”的描述,要对操作步骤和状态变 化给出明确的描述。例如,过程式和面向对象程序 设计。 与冯诺依曼体系结构一致,是使用较广泛的程序设 计范式,适合于解决大部分的实际应用问题。 声明式程序设计(declarative programming 强调对“做什么”的描述,而如何做则由实现系统 自动完成。例如,函数式和逻辑式程序设计 有良好的数学理论支持,并且,设计出的程序具有 潜在的并行性。适合于需要大量进行复杂的符号处 理(非数值计算)的人工智能领域的应用
◼ 命令式程序设计(imperative programming) • 强调对“如何做”的描述,要对操作步骤和状态变 化给出明确的描述。例如,过程式和面向对象程序 设计。 • 与冯诺依曼体系结构一致,是使用较广泛的程序设 计范式,适合于解决大部分的实际应用问题。 ◼ 声明式程序设计(declarative programming) • 强调对“做什么”的描述,而如何做则由实现系统 自动完成。例如,函数式和逻辑式程序设计。 • 有良好的数学理论支持,并且,设计出的程序具有 潜在的并行性。适合于需要大量进行复杂的符号处 理(非数值计算)的人工智能领域的应用。 命令式v声明式程序设计
函数式程序设计简介 程序由一组数学函数构成, 计算过程体现 为一系列的函数应用(把函数作用于数 据) 函数也被作为值(数据)来看待, 即函数 的参数和返回值也可以是函数。 基于的理论是递归函数理论和ambda演算
函数式程序设计简介 ◼ 程序由一组数学函数构成,计算过程体现 为一系列的函数应用(把函数作用于数 据)。 ◼ 函数也被作为值(数据)来看待,即函数 的参数和返回值也可以是函数。 ◼ 基于的理论是递归函数理论和lambda演算
函数式程序设计的例子 。计算: a b c/d 传统的命令式编程: t1 a b; t2 c/d; r t1 t2; 函数式编程: multiply(...)... divide(...)...} add(.){..} ..add(multiply(a,b),divide(c,d))
函数式程序设计的例子 ◼ 计算: a * b + c / d ◼ 传统的命令式编程: t1 = a * b; t2 = c / d; r = t1 + t2; ◼ 函数式编程: multiply(...) { ... } divide(...) { ... } add(...) { ... } ... add(multiply(a,b),divide(c,d))
■ 计算字符串的逆序: "abcd"-->"dcba" 传统的命令式编程: void reverse(char str[]) int len=strlen(str); for (int i=0;i<len/2;i++) char t=str[i]; str[i]str[len-i-1];str[len-i-1]t; } 函数式编程: string reverse(string str) if (len(str) ==1) return str; else return concat(reverse(substr(str,1,len(str)-1)),substr(str,0,1)); } 注意:不是写成函数就是函数式编程!
◼ 计算字符串的逆序: "abcd" --> "dcba" ◼ 传统的命令式编程: void reverse(char str[]) { int len=strlen(str); for (int i=0; i<len/2; i++) { char t=str[i]; str[i] = str[len-i-1]; str[len-i-1] = t; } } ◼ 函数式编程: string reverse(string str) { if (len(str) == 1) return str; else return concat(reverse(substr(str,1,len(str)-1)),substr(str,0,1)); } ◼ 注意:不是写成函数就是函数式编程!