站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
ML
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
==编程风格== 通常大家学习编程都是从命令式语言开始的。和函数示语言不同,命令式语言以语句作为基本单位。[[Algol]]家族的所有语言都是命令式语言,[[ML]]也不例外。因此学习ML不像学习[[Scheme]]那样需要完全转换一套思路。但是[[ML]]继承了函数式语言的很多特征,而且也有自己的一些特点。 线性数据结构 程序中总要定义数据结构。常用的[[定长线性结构]]包括:[[Pascal]]的[[record]],[[C]]的[[struct]],[[C++]]和[[Java]]的[[class]]。在ML中我们通常用[[tuple]],即用圆括号括起来的,用逗号分隔的若干项元素。 Tuple是个线性结构,可以用整数索引。比如 #1(1, 2.0, "apple") = 1 #2(1, 2.0, "apple") = 2.0 #3(1, 2.0, "apple") = "apple" 和Algol类语言的数组不同的是,tuple中各个元素的类型可以不一样。 [[C++]]的[[boost]]模板库中提供了一个模板[[tuple]],模仿ML/Scheme的[[tuple]],使[[C++]]程序员可以将不同类型的数据组织成一个便于访问的线性结构。 函数的嵌套定义 ML和大多数Algol类语言一样支持函数的嵌套定义(包括Algol 60、Algol 68和Pascal,但是C是例外)。 如果函数A和函数B互相嵌套调用(indirect recursion),则源程序中可以将B的函数体定义在 A的函数体内,或者A的定义在B的函数体内。具体采用那一种,要看外界是调用A还是B。 函数addqueen和其内部函数try就是这样的例子。显然addqueen是要被外部调用的。 用尾部递归(tail recursion)代替循环 如果用Algol类语言(例如 Pascal和C)来写函数addqueen,其中需要一个循环,从某行的第一个位置开始,判断如果在这个位置上放一个皇后是否可以使得其不和前面已经放上的皇后冲突,而且后面还可以继续放满皇后。而ML中这个循环用递归函数tryARow表示。 纯表达式(pure expression)风格 大多数Algol类语言对机器的抽象是以内存为中心的,即[[变量]]和[[对象]](object)对应内存中的存储区域,赋值语句对应机器的访存操作,所以程序中有大量的赋值语句。ML也支持赋值,但是通常建议采取的风格是类似Lisp和Scheme的纯表达式风格,避免赋值操作。 例如如果用C来描述n皇后问题,通常我们会设计一个数据结构描述棋盘(和ML程序一样),然后定义这个数据结构的一个实例(可能是个全局变量)。算法的主要工作是通过赋值修改这个实例的内容。 而例子中的ML代码中经典的一段是函数place。这是修改棋盘数据结构的代码。但是并没有使用赋值,而是产生了一个新的数据结构实例,其内容和参数略有区别(放上了一个新的皇后)。 纯表达式的使用要求程序员先对程序考虑得非常细致才能动笔(动手?),因此使得程序逻辑更加清晰。(这和literate programming的思想是一致的。)但是目前的硬件机器是以内存为中心设计的,所以纯表达式语言的实现([[编译器]]和[[解释器]])的效率依靠于设计者多费心思。ML就是通过[[静态作用域]]([[statically scoping]])和uniform data representation等特点结合起来达到高效的。
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)