SML(一)

1. ML是一个函数式编程语言,理论基础为λ演算。

2. 变量声明

val x = e;

标准类型:单元(unit)、布尔(bool)、整型(int)、字符串(string)、实数(real)、元组(tuple)、记录(record)、列表(list)

1)负数表示:负号用“~”表示,-1表示为“~1”;

2)字符串:双引号间的字符序列;

3)实数:其他语言表述为double的浮点数;

4)list:“[]”表示空list,list 例:[1, 4, 9, 16, 25],list中的数据类型要求一致,可以嵌套;

5)tuple:圆括号中用逗号分隔的数据元素,可以嵌套,元组数据类型可以不一致,例:(a, 9);

6)record:记录的值和类型的写法都用{}括起来,例:{first : int, middle : int, last : int};

1

元组

列表

记录

括号

()

[]

{}

元素类型

可以不同

必须相同

可以不同

长度

定长

变长

变长

类型表达式

用*连接的<元素类型>表达式

<元素类型> list

{记录名: <元素类型>}

3. 使用程序文件:use "foo.sml";

4. 函数定义

SML中函数的类型是由他的定义域和值域共同确定。

SML

C语言

fun division(x : int, y : int) =

x div y

int division(int x, int y)

{

return x/y;

}

5. 元组数据引用

元组pr : int * bool  => #1 pr元组 第一个元素,int类型;#2 pr 元组第二个元素,bool类型;

6. 列表数据引用

hd, 列表表头元素;tl,hd元素以外的列表;

7. let表达式:let b1 b2 … bn in e end

b1 b2 … bn 可以为变量声明、函数定义等, e为表达式

8. 条件表达式:if e1 then e2 else e3

e1、e2、e3为表达式,e2和e3要求相同的数据类型;

9. NONE、SOME和valOf

关键字

Evaluate

TYPE

'a

任意类型

'a list

任意类型的list;hd类型确定后,list类型固定

NONE

NONE is an option value "carrying nothing" whereas

'a option

SOME e

SOME e evaluates e to a value v and becomes the option carrying the one value v.

t option if e has type t.

null、isSome

null to see if a list is empty, we have isSome which evaluates to false if  its argumentis NONE.

valOf

get the value carried by SOME (raising an exception for NONE)

10. 运算符

算术加、减、乘、除:+、-、*、div(整型)、/(real类型)

逻辑运算与、或、非、等、不等、大于、小于、大于等于、小于等于:andalso、orelse、not、=、<>、>、<、>=、<=

字符串连接:^

两个列表连接:@

数据e与列表es连接:e::es

Programming Language A 学习笔记(一)的更多相关文章

  1. Programming Language A 学习笔记(二)

    1. 语法糖--元组的"名称引用"与"位置引用": (e1,...,en) <=> {1=e1,...,n=en} 类型:t1 * - * tn & ...

  2. 《The C Programming Language》学习笔记

    第五章:指针和数组 单目运算符的优先级均为2,且结合方向为自右向左. *ip++; // 将指针ip的值加1,然后获取指针ip所指向的数据的值 (*ip)++; // 将指针ip所指向的数据的值加1 ...

  3. Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...

  4. Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  5. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  6. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  7. Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

随机推荐

  1. Qt 5.0+ 中 connect 新语法与重载函数不兼容问题的解决方法,以及个人看法

    Qt 5.0+ 版本提供了 connect 的新语法,相比之前的语法新语法可以提供编译期检查,使用也更方便.可是使用过程中发现一个小问题——当某个 signal 和成员函数是重载关系的时候,qmake ...

  2. mybatis逆向工程生成JavaBean、dao、mapper generatorSqlmapCustom

    import java.io.File; import java.util.ArrayList; import java.util.List; import org.mybatis.generator ...

  3. 安装Axure7.0,完整教程,有验证码和汉化包

    以下内容由Axure中文网 » Axure7.0中文汉化语言包下载 axure汉化包 改编,特此声明 1.下载安装包 官方下载页面: http://www.axure.com/download 官网直 ...

  4. 百度API城市代码CityCode官方文档

    100 拉萨市101 那曲地区102 日喀则地区103 阿里地区104 昆明市105 楚雄彝族自治州106 玉溪市107 红河哈尼族彝族自治州108 普洱市109 西双版纳傣族自治州110 临沧市11 ...

  5. PHP window下安装Spl_Types模块

    1. Window下,Spl_Types的模块的下载地址:http://pecl.php.net/package/SPL_Types/0.4.0/windows 2. php的可执行文件已经加到系统的 ...

  6. 纯CSS弹出菜单(不支持IE6.0以下)

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  7. ubuntu 配置VPN

    1.  sudo apt-get install pptpd 2.  修改/etc/pptpd.conf , vi /etc/pptpd.conf 找到#localip 192.168.0.1和#re ...

  8. ztree-demo 2

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - Async</TITLE> <m ...

  9. jquery动态合并表格行

    利用<td rowspan = "num"/>;原理来实现,其中num为要合并的行数. <!DOCTYPE html> <html> <h ...

  10. java servlet

    回顾 1三要素是什么? 入口(login.html)     处理(LoginServlet.java)  出口 (success.jsp) 2如何访问servlet http://IP:port/p ...