sml基本语法(一)
注释
(* *)
(不是单行注释//
或 块注释/* */
)
运算
- 一元操作符没有
+
和-
,表示负数应该使用~
,eg:~6表示-6 - 整数除法
div
(除术算法),实数除法/
,取余(模)mod
(不是%
) - 函数运用比中缀运算符优先级更高
函数的形参列表可以不用括号"()"
括住,如下
area (1.0);
area 1.0 //二者等价
PS:
area a + b
等价于(area a) + b
但不等价于area (a + b)
类型
有哪些类型?
ML中的内置类型有int,real,char,string和bool,见下表(不全)
类型 | 值 | 操作数 |
---|---|---|
real | 3.14, 2.17, 0.1E6, . . . | +, -, *, /, =, <, . . . |
char | #“a”, #“b”, . . . | ord,chr,=, <, . . . |
string | “abc”, “1234”, . . . | ˆ, size, =, <, . . . |
bool | true, false | if exp then exp1 else exp2 |
详见:Basic Library
类型断言(typing assertion)
exp : typ
(exp表达式,typ类型)
- 表达式的类型:(由于一个表达式的类型一定确定,或者说由type checker确定)我们说类型声明是有效的当且仅当
exp
的类型确实是typ
,比如下面的例子
3:int3+4:int4div3:int4mod3:int3 : int\\ 3 + 4 : int\\ 4 div 3 : int\\ 4 mod 3 : int3:int3+4:int4div3:int4mod3:int
否则,interactive system 会给如下报错
///~input
- 3 + 4 : real;
///~output
stdIn:1.2-1.14 Error: expression does not match constraint [overload conflict]expression: [+ ty]constraint: realin expression:3 + 4: real
表达式类型断言的语句(expressions of typing assertion)没有实际用处,但这说明ML语言中存在严格的类型约束
- 类型约束
(1)
ML可以根据表达式里面用到的函数和常量的类型推导出大多数表达式的类型。不过某些内置的函数是被重载(overloaded )了的,它们不止有一个含义。例如,
+
和*
对于整敬和实数中都有定义.重载函数的类型必须由上下文来确定,偶尔必须显式地指出。///~input - fun square x = x*x; ///~output Error-Unable to resolve overloading tor *
应改为
fun square (x : real) = x*x;
--《ML程序设计教程》
实际测试(可能是smlnj版本不同,不过引用中的例子主要说明存在严格的类型检测)
- fun square x = x*x;
val square = fn : int -> int
这里也说明参数当类型不确定时,默认定为int
(2)
加法操作
+
对real
和int
进行重载。在涉及加法的表达式中,type checker尝试识别你的参数类型. 如果参数是两个int类型数,,那么定点数加法(fixed point addition)被使用;如果参数是两个real类型数,那么浮点数加法(floating addition)将被使用;否则将会收到报错。
例如
3+3.143+3.143+3.14 is rejected as ill-formed
应该改为real(3) + 3.14
- 如何判断表达式的类型?
例如(3+4)(3+4)(3+4) divdivdiv 5:int5 : int5:int
(1) 5是int,由公理决定(公认的,或者说是intintint本身的定义)
(2) 操作符 divdivdiv 两端的操作数的类型均为int,所以表达式(3+4)(3+4)(3+4) divdivdiv 555为intintint
(表达式 3+43 + 43+4 的类型为intintint,理由同(2))
(3) 表达式的值由表达式的类型决定,该例中结果为val it = 0 : int
参考文献
[1]Programming in Standard ML (DRAFT: VERSION 1.2OF 11.02.11.)By Robert Harper, Carnegie Mellon University, Spring Semester, 2011
[2]ML程序设计教程
sml基本语法(一)相关推荐
- sml基本语法(三)——函数
写在前面 本博客更类似博主本人的学习笔记,请各位谨慎参考,以防被误导 由于写本篇时对函数式编程仍然理解不够深入,现在看来命令式思维很重,但是作为sml入门来说应该有些心得的确能帮助到大家 语法原型(数 ...
- Programming Languages PartA Week2学习笔记——SML基本语法
Programming Languages PartA Week2学习笔记--SML基本语法 首先简单介绍使用的SML语言,参考维基百科和百度百科: ML(Meta Language:元语言)是由爱丁 ...
- Programming Languages PartA Week3学习笔记——SML基本语法第二部分
文章目录 Building Compound Types Records Tuples as Syntactic Sugar Datatype Bindings Case Expressions Us ...
- sml基本语法(二)
变量.类型.作用域 变量 类型 作用域 ML语言的作用域是静态的.词法的(static, lexical),与C语言类似. 声明的变量.类型的作用域具有全局的作用域(Global Scope),即剩下 ...
- 基于C语言实现的SML简单程序设计
资源下载地址:https://download.csdn.net/download/sheziqiong/85896108 资源下载地址:https://download.csdn.net/downl ...
- Office 文档解析 文档格式和协议
本文讨论的 Office 文档指的是 Office 2007 及以后的 PPTX 和 xlsx 等格式的文件.在 Office 2007 之前使用的不公开标准的二进制格式定义.在 Office 200 ...
- android语法高亮编辑器,HighlightTextEditor
软件简介 语法高亮 HighlightTextEditor是一个安卓代码语法高亮控件,目前已经支持200多种语言,近90多种主题配色方案,同时支持lua扩展,以及自定义语言配置.强烈推荐,一款不可多得 ...
- android语法高亮插件,安卓语法高亮编辑器 HighlightTextEditor
软件介绍 语法高亮 HighlightTextEditor是一个安卓代码语法高亮控件,目前已经支持200多种语言,近90多种主题配色方案,同时支持lua扩展,以及自定义语言配置.强烈推荐,一款不可多得 ...
- Haroopad Markdown 编辑器代码语法高亮支持
代码语法高亮 支持的语言和缩写标记 参考 代码语法高亮 书写格式为: ` ` ` language_key if (condition){ return true } ` ` ` 在 ` ` ` (三 ...
最新文章
- oracle改表结构,Oracle修改表结构
- 2000条你应知的WPF小姿势 基础篇45-50 Visual TreeLogic Tree 附带两个小工具
- AP付款出现(-1)例外处理
- java项目001.双色球游戏
- Spark运行原理剖析
- SweetAlert – 替代 Alert 的漂亮的提示效果
- Java实现正整数数组的最小拼接数
- 浙大java语言程序设计_浙江大学java语言程序设计实验答案全集.doc
- train_val.prototxt文件和deploy.prototxt文件开头的区别
- finebi跳转到本地html文件,组件跳转- FineReport帮助文档|报表开发|报表使用|学习教程...
- html手机网页新闻模板,新浪手机新闻网站模板首页html源码
- 恢复手机qq删除的收藏表情
- 朋友买的115资源系统源码
- java读取共享文件夹
- b站React禹哥版视频笔记-React应用(基于react脚手架)
- [摄影学习]-ZFC进阶操作学习
- 火狐浏览器This address is restricted.端口问题
- java.io.IOException Failed to replace a bad datanode
- Linux宝塔控制面板如何实现多个二级域名301重定向跳转
- SRAMRAMROM介绍