Programming Language A 学习笔记(一)
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 学习笔记(一)的更多相关文章
- Programming Language A 学习笔记(二)
1. 语法糖--元组的"名称引用"与"位置引用": (e1,...,en) <=> {1=e1,...,n=en} 类型:t1 * - * tn & ...
- 《The C Programming Language》学习笔记
第五章:指针和数组 单目运算符的优先级均为2,且结合方向为自右向左. *ip++; // 将指针ip的值加1,然后获取指针ip所指向的数据的值 (*ip)++; // 将指针ip所指向的数据的值加1 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...
- Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
随机推荐
- [cocos] ( 01 ) cocos2d-x 3.x 开发 环境配置
有几个需要注意的问题 Windows上使用时, Unable to execute dex: Multiple dex files define 在eclipse中libcoco2dx的Java Bu ...
- JS/CSS收藏
jQuery radio取值,checkbox取值,select取值 var url += '&beginTime=' + encodeURIComponent(beginTime) if ( ...
- Android实现双击事件的两种方式
Work around的方法是先监听onTouch事件来监听连续点击次数,每次点击都布置一个间隔时间的延时任务,延时任务执行时判断间隔内是否还有点击,如果没有则发布点击次数,重置计数. 实现代码如下: ...
- Xcode 属性面板添加自定义控件属性
让自定义控件像原生控件一样可以在属性面板配置参数,Apple文档传送 直接上效果图,根据
- 各大浏览器内核特性及对应的Browserhacks举例
1.浏览器内核指的是什么? 简化的浏览器=用户界面+渲染引擎+js解析引擎+数据存储+网络部件 而通常所说的浏览器内核指的是页面渲染引擎(rendering engine). 2.渲染引擎 The r ...
- 企业号查询部门id(改版后)
1.搜索部门,输入"名称" 2.在后面可以查到部门ID
- C# Mvc异常处理过滤器
using System; using System.Text; using EMS.Domains.Core; using System.Web.Mvc; using Json.Net; using ...
- swift 3.0 协议笔记
协议能够要求遵循者必须含有一些特定名称和类型的实例属性(instance property)或类属性(type property),也能够要求属性的(设置权限)settable 和(访问权限)gett ...
- JSP复习整理(五)JavaBean生命周期
一.创建一个JavaBean UserBean.java package jsp.test; public class UserBean { private String userName; priv ...
- 用DllImport引用的外部DLL文件如何通过clickonce发布
在.net中非托管代码或非COM组件的外部DLL文件只能用DllImport的方式使用,但是在clickonce方式发布时不会自动包含到发布清单中去,办法是在项目中先把外部DLL文件作为普通文件添加进 ...