90 likes | 422 Views
OCaml. 如果编程语言是一辆车. OCaml 是一部非常性感的欧版车。它没有 C 车那样快,但它从来不出故障,所以,最终还是它用了最短的时间到达目的地。然而,因为它是法式的,没有一个控制杆 / 按钮是安放在通常的位置上的。. OCaml 是. Objective Caml 是 Caml 的主要实现。 函数型编程语言强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里,函数的计算可随时调用。 函数型编程语言的特点: 1. 闭包和高阶函数,函数可作为其他函数的输入。 2. 惰性计算,表达式在需要用到值时进行运算,而不是绑定时。 3. 递归。
E N D
如果编程语言是一辆车 OCaml是一部非常性感的欧版车。它没有C车那样快,但它从来不出故障,所以,最终还是它用了最短的时间到达目的地。然而,因为它是法式的,没有一个控制杆/按钮是安放在通常的位置上的。
OCaml是... • Objective Caml是Caml的主要实现。 • 函数型编程语言强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里,函数的计算可随时调用。 • 函数型编程语言的特点: • 1.闭包和高阶函数,函数可作为其他函数的输入。 • 2.惰性计算,表达式在需要用到值时进行运算,而不是绑定时。 • 3.递归。 • 4.引用透明性,表达式的值不依赖于可以改变值的全局状态。 • 5.木有副作用,不包含赋值语句,调用函数只会计算出结果,不会出现其他效果。
OCaml是... • 一种ML,MetaLanguage。 • 函数型语言。 • 静态强类型语言,严格的类型规定。 • 如何严格?(它没有C车那样快,但它从来不出故障。) • 2 + 2.5?不同类型间的运算是不被允许的 (float_of_int 2) +. 2.5 • 2.0 + 2.5?不允许操作符重载 2.0 +. 2.5 类似的*. /. -. • 如此,在进行函数声明无需进行类型声明,类型会被自动推出。 • 隐式的类型转换所造成的错误很难被发现,会花很多时间来计算在哪里要发生隐式转换。
定义函数 • 那么作为函数型语言,OCaml是如何定义函数的呢? • 1.相加 • let sum a b = a + b;; • 2.平均数 • let average a b = (a +. b) /. 2.0;; • 3.平均数 • let average a b = (a +. b) /. 2.0;;
go on • 4.函数嵌套 • let sumofsquare x y = let sqx = x * x in let sqy = y * y in sqx + sqy;; • 5.递归函数 • let rec fact x = if x > 1 then x * (fact (x-1)) else 1;;
Hello World • let PL2014 = print_endline "Hello world!";;
函数调用 • 假设有一个函数strrepeat输入两个参数,分别为字符串str和整型a,来重复字符串a遍。 • strrepeat "PL" 2014 • 不同于C,没有括号包含参数,也没有逗号分隔参数。(*然而,因为它是法式的,没有一个控制杆/按钮是安放在通常的位置上的。*) • 那么strrepeat ("PL",2014)又是什么意思呢? • 给strrepeat传一个参数,这个参数是一个pair。
更多 • 1.引用 let a = ref 10;; • 2.无参数函数 let a () = 1 + 1;; • 3.if then else 与C基本一样 • 4.match with • let rec sum n = match n with 0 -> 0 | x -> (x + sum (x-1));; | 表示其他情况 • 5.for i = 0 to n do ...... done