最近开始接触Ocaml,一开始也是摸不着头脑。看着PPT,学习一下。

Ocaml 有几个比较显著的特征

1.Value 为中心

所有的一切都是value

一旦定义了就无法改变了

2.函数型的语言

函数也是value

3.具有严格的类型type

保障程序的安全

ML的有很多,比较有名的有Ocaml(INRIA,France) SML(Bell,lab&Princeton USA) 顺便提一下我们教授开发的nML(SNU/KAIST)

1.Let

给Value一个名字

(* ex1.ml *)
let a = 10
let add x y =
x + y
let sumofsquare x y =
let sqx = x * x in
let sqy = y * y in
sqx + sqy

(* ex2.ml *)
let sumofsquare x y =
let square x = x * x in
square x + square y

2.If,match

判断语句

(* ex3.ml *)
let isEven n =
if n mod 2 = 0 then true
else false

if 语句必须有完整的格式 if…then…else 因为 必须保证 n有一个value

(* ex4.ml *)
let isEven n =
match n mod 2 with
  0 -> true
| 1 -> false

和ex3.ml有相同的效果,只是换了一种形式 match…with 有点像switch

(* ex5.ml *)
let is3mulitple n =
match n mod 3 with
  0 -> true
| _ –> false

_->false 表示除了0 以外的任意 integer 都是false

3.Function

-3.1一般的函数

let isEven n =
if n mod 2 = 0 then true
else false

函数也是value,理解这点很重要

-3.2 没有名字的函数

(fun x –>10+ x)

-3.3 递归函数

let rec fac n =
if n = 0 then 1
else n * fac(n-1)

递归函数的定义要有一个 rec

4.类型 Type

Ocaml 可以自动判断value的类型,这一点是很牛的,能够避免很多因为类型声明造成的错误

Ocaml自身也带有很多基本类型,int,string,list,tuple,record等

自己可以定义类型

5.比较严格的类型区分

5.1

2+2.5 是错误的表达式 int 和float 不能相加

=>(float_of_int 2) +. 2.5 这种才是正确的表达

float 的演算也是自己的符号 +. –. *. /.

5.2

对等的表达式的类型必须相同,比如if的分支,和c语言作一个简单的比较

(* C *)
int lucky(){
int r;
while (1){
r = rand() % 100;
if (r == 50)
return r;
else
printf(“again/n”)
}
}

C的else 是一个printf

(* OCaml *)
let rec lucky () =
let r = Random.int 100 in
if r = 50 then
r
else
(printf(“again/n”); lucky())

但是在ocaml 里面else里面也必须是和r 对等的表达式

6.List

相同类型value的排列

第一个element和后面的elements分开

[1;2;3] = 1::[2;3] = 1::2::[3]

[“a”] = “a”::[]

let ilist1 = [1; 2; 3]  
let ilist2 = 4::ilist1
let ilist3 = ilist1@ilist2 //连接两个list

let getHead l =
match l with
  h::t –> h  //h::t 表示一个list type
| [] -> raise Error

8.tuple
可以是各种类型的value的组合

let man = (“age”,24)

let input = (10,100,(fun x->x * x))

let get?rst l =
match l with
  (f, _, _) –> f

9.record

标有名字的value的组合,和c语言的Struct比较相似

type subject = {name : string; credit : int}

let getName r =
match r with
  {name= n; credit = c} –> n

10. 自定义类型

可以方便的定义各种类型

给已经存在的type 新的名字标示

type value = int

type tree = Leaf | Node of value * tree * tree

(tree 是一个type, 可以具有Leaf 或者Node )

let t = Node (5, Leaf, Node (4, Leaf, Leaf))

let rec sum t =
match t with
  Node (v, t1, t2) -> v + sum t1 + sum t2
| Leaf –> 0

10.1 自定义type的多样性

type itree = Leaf of int
| Node of int * itree * itree

type ‘a tree = Leaf of ‘a
| Node of ‘a * ‘a tree * ‘a tree
let a = Leaf 5
let b = Node(“b”,Leaf”l”,Leaf”r”)

Ocaml 的入门整理 1相关推荐

  1. 一个完整的区块链入门整理,良心推荐

    一个完整的区块链入门整理,良心推荐!!! 入门介绍与原理: 一.比特币 1.比特币白皮书 –来自百度网盘超级会员V8的分享 这是一切的开始 2.精通比特币 提取码:mj86 讲比特币很详细的一本书,看 ...

  2. OCaml从入门到放弃

    title: OCaml从入门到放弃 date: 2020-01-04 13:28:47 文章目录 0. 前言 1. 注释与输入输出 2. 编译与运行 3. 变量 3.1. 基本类型 3.2. let ...

  3. 8、JDBC入门整理

    JDBC入门 l  导jar包:驱动! l  加载驱动类:Class.forName("类名"); l  给出url.username.password, l  使用DriverM ...

  4. Ubuntu+Pytorch开发入门整理——环境搭建

    最近在使用Ubuntu开发,但是在配置环境中的时候发现的确会有一些坑,比如nVidia的驱动,现在做一些资料整理. 安装方面,使用的是unetbootin制作的U盘,在电脑上进行安装,安装时候值得注意 ...

  5. 深度学习入门整理学习(二)

    深度学习入门 深度学习横跨矩阵论.概率论与数理统计.信息论.博弈论.最优化等理论,并融合机器学习.数据挖掘.大数据.人工智能等领域技术,是具有深度和广度的综合范例 数学基础 矩阵论 (1)正交矩阵 A ...

  6. 什么是ocaml语言之ocaml语言入门

    运行 OCaml 代码 运行OCaml代码的最简单的方式是在你的浏览器中使用在线运行运行一个交互式会话. 关于在你的电脑上安装OCaml,请参考安装文档. 如果你想要尝试一些简单的OCaml表达式,你 ...

  7. js -- ES6(一)-- 简介(根据阮一峰ES6标准入门整理)

    目前正在学习ES6,根据阮一峰的ES6入门2,学到哪更新到哪里,都是基本的知识,复杂的目前还不会,涉及的代码都是亲自运行过的,若发现错误请指正. ES6 提供了许多新特性,但是并不是所有的浏览器都能够 ...

  8. lucene 入门整理

    2019独角兽企业重金招聘Python工程师标准>>> 1.    概述 Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎.Lucene以其方便使用.快速实施以及 ...

  9. android入门整理

    android 四大组件 android的四大组件 安卓的四大组件:活动.广播.服务.内容接收器 活动Activity:对应着一个UI界面,控制着一个UI界面的动作和事务. 活动的生命周期,onCre ...

最新文章

  1. linux下的vi与vim
  2. 关于R语言plyr包的安装问题
  3. qt windows 静态编译_VS+QT工程配置问题
  4. 用Qt 4.4编写drcom的GUI (转)
  5. vue单页面跳页没有数据了_详解刷新页面vuex数据不消失和不跳转页面的解决
  6. 装完nvme固态经常蓝屏_微软确认Win10 20H2使用雷电连接固态盘会直接蓝屏死机
  7. java内存溢出排查jstack_Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)
  8. shell中字分隔的妙用:变量IFS
  9. HashMap源码解释
  10. 用子函数实现strlen.strcpy.strcat.strcmp(完整代码)
  11. 【纪中集训2019.3.23】Deadline
  12. easypoi 表头数据导入_使用easypoi根据表头信息动态导出excel
  13. (附源码)计算机毕业设计ssm电影票网上订票系统
  14. 服务器版dll修复工具,DLL修复工具哪个好?五款修复能力强推荐
  15. Java中常见的服务器
  16. esxi 命令行格式化硬盘
  17. Kattis- 3D Printed Statues
  18. 传感器与检测技术基础知识(4)—— 电阻式传感器
  19. 线性分式变换(linear fractional transformation)
  20. STM32上电启动代码详解(转自安富莱电子)

热门文章

  1. 无线通信网络学习之Wlan架构介绍
  2. 无线传感器网络通信标准
  3. 第九章结构体变量实验报告
  4. bugku ctf 各种绕过 (各种绕过哟)
  5. 蓝桥杯--平行四边形的面积
  6. 静态环形队列(C语言)
  7. 如何打开SAR 文件 1
  8. 论css咋调节“亮-暗”色彩模式
  9. 项目一,认识linux操作系统
  10. 从300万字符串中找到最热门的10条