第十章数据结构的效率
本章介绍
■优化和改进递归函数
■使用尾递归(tail-recursion)和连续(continuations)
■高效地使用列表和数组
到目前为止,,我们在本书中已经使用过的函数式方法,有递归和函数式数据结构,比如,不可变列表。我们能写的最简单代码,是使用基本的 F# 集合类型(列表),直接表达我们的意图。在很多情况下,这种方法是合适的;但是,用来处...
分类:
其他好文 时间:
2014-12-16 17:14:48
阅读次数:
133
顾名思义,当我们查字典的时候,我们会根据索引去查找我们需要查找的资源,在swift中也是如此,字典的每一个对象都包含一个key和一个value,我们通过key去查找当前这个key所对应的value,与数组不同的是字典中的数据项在字典中没有具体的存储顺序。
和Swift中数组类似的,在Swift可变字典与不可变字典仅仅通过let和var的定义来区分,而在OC中是通过NSDictionary和N...
分类:
编程语言 时间:
2014-12-16 15:10:55
阅读次数:
168
首先明确字符串,数字和元组作为函数参数时是不可变的,但是列表和字典等数据结构却是可以改变的。defchange(n):
n[0]=‘apple‘
names=[‘banana‘,‘pear‘]
n=names[:]
change(n)
printnames,n
[‘banana‘,‘pear‘][‘apple‘,‘pear‘]修改后让原始列表保持不变。假设现在要编写一个存..
分类:
编程语言 时间:
2014-12-16 06:35:10
阅读次数:
279
NSString 是不可变字符串,所以方法调用时并不是对原字符串进行修改,而是先建立一个原字符串的副本,然后对副本内容进行修改.
NSMutableString是NSString的子类,可以使用它的所有方法。
NSMutableString提供了附加字符串的方法。
可以使用appendString或appendFormat来对可变字符串操作:
- (void) appen...
分类:
其他好文 时间:
2014-12-16 01:21:50
阅读次数:
204
1.数组1.1 不可变数组(只读数组)注意:OC数组和C数组的区别: -》创建方式不同; -》OC数组本身也是一个对象,是任意类型对象地址的集合; -》OC兼容C的数组,可用于存储对象;(1)创建数组对象-》方式一:NSArray *array = [[NSArray alloc] initWith...
分类:
编程语言 时间:
2014-12-14 17:05:09
阅读次数:
298
Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。 默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误! 要注意定义可变参数和关键字参数的语法: *args是可变参数,args接收的是一个tuple; **kw是关键字参数,kw接收的是一个dict。...
分类:
编程语言 时间:
2014-12-13 21:47:37
阅读次数:
293
首先声明一下:OC 中的函数,是全局的,如 NSLog();,它不属于任何类,不属于任何一个对象。OC 中的方法,非全局的,init 方法,用中括号来使用,它属于类本身,或者属于对象本身;分为类方法,和实例方法(对象方法);方法被封装对象,或类模板当中1. 不可变字符串NSString1.1 OC字...
分类:
编程语言 时间:
2014-12-13 21:38:42
阅读次数:
178
字符串:string 字符串的不可变性 当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一款空间 当程序结束后,GC会扫描整个 内存,如果发现有的空间没有被指向,则立即把他们销毁我们可以将字符串string类型可以看做是char类型的一个只读数组ToCharArray() new Stri...
分类:
其他好文 时间:
2014-12-13 17:38:01
阅读次数:
125
9.4.1 函数式和命令式类
在类或者类的构造函数的参数值中的 let 绑定,就像我们在其他 F# 代码中看到的 let 绑定一样,也是不可变值;此外,使用 member 关键字声明的属性,创建的是只读属性(只有 getter)。因此,如果类只引用其他不可变类型的值,那么,类也不可变。
比方说,在前面的例子中,我们要允许改变客户的收入,可以有两种方式:
■以纯函数式风格,对象将返回一...
分类:
其他好文 时间:
2014-12-12 11:42:13
阅读次数:
146
参数传递:
参数的传递是通过自动将对象赋值给本地变量来实现的,作为参数被传递的对象从不自动拷贝
在函数内部的参数名的赋值不会影响调用者
改变函数的可变对象参数的值也许会对调用者有影响(实质:不可变对象(如字符串 简单类型 元组)是通过'值'进行传递的,可变对象如字典 列表是通过'指针'进行传递的)
>>> def change(a,b):
a=2
print id(b)
print ...
分类:
编程语言 时间:
2014-12-11 17:20:37
阅读次数:
218