哎,因为上周忙着写OAuth2.0服务端框架草稿 ,耽误了一周学习Io Language了。
本篇习题解答是接着 《七周七语言:理解多种编程范型》のRuby课后习题答案
Io是原型语言,类似于JavaScript,并不区别类和对象,所有的东东都是对象,对象的数据结构就是由键值表来维护的(在Io中就是所谓的槽),通过各种消息传递给对象来实现打印输出,复制对象等功能。因为语法非常简单(也木有语法糖),所以你可以尽情构建自己的库和功能。
第一天:
1. 对1+1求值,然后对1+"one"求值。Io是强类型还是弱类型语言?用代码证实你的答案。
Io是一种动态的(类型是在运行期检查的),强类型语言。
Io 20110905 Io> 1+"one" Exception: argument 0 to method '+' must be a Number, not a 'Sequence' --------- message '+' in 'Command Line' on line 1
2. 0 是 true 还是 false ? 空字符串是 true 还是 false ? nil 是 true 还是false ? 用代码证实你的答案。
0,空字符串都认为是true,而nil认为是false
Io> if (0) then ("OK\n" print) OK ==> nil Io> if ("") then ("OK\n" print) OK ==> nil Io> if (nil) then ("OK\n" print) ==> false
3. 如何知道某个原型都支持哪些槽?
xxx proto
xxx slotNames
4. = (等号)、 := (冒号等号)、::= (冒号冒号等号)之间有何区别?你会在什么情况下使用它们?
Assign Operators
::= newSlot
:= setSlot
= updateSlot
Io> Vehicle := Object clone ==> Vehicle_0x7fc3dbeb7110: type = "Vehicle" Io> Vehicle description := "a fast car" ==> a fast car Io> Vehicle slotNames ==> list(description, type) Io> Ferrari := Vehicle clone ==> Ferrari_0x7fc3dbe4f2e0: type = "Ferrari" Io> Ferrari colour ::= "red" ==> red Io> Ferrari slotNames ==> list(setColour, type, colour)
看,:=和::= 差不多,区别就在于用::=就多了一个setColour 的槽。
你可以 Ferrari setColour("Blue") 来定义Colour的颜色。
第二天:
斐波那契数列以两个1开始,每一个人数都是之前两个数之和:1,1,2,3,5,8,13,21,以此类推。
题外话:以兔子繁殖为例子而引入,故又称为“兔子数列”。
经过月数
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
幼仔对数
|
1
|
0
|
1
|
1
|
2
|
3
|
5
|
8
|
13
|
21
|
34
|
55
|
89
|
成兔对数
|
0
|
1
|
1
|
2
|
3
|
5
|
8
|
13
|
21
|
34
|
55
|
89
|
144
|
总体对数
|
1
|
1
|
2
|
3
|
5
|
8
|
13
|
21
|
34
|
55
|
89
|
144
|
233
|
写一个计算第N个斐波那契数的程序,这里fib(1) 会得到1, fib(4) 会得到3。如果你能用递归和循环两种方法写出来,我将给你额外加分。
result :=0; result_b2 := 1; result_b1 := 0; fib := method(n,for(i,1,n, //cal result result := result_b2 + result_b1; //move num result_b2 := result_b1; result_b1 := result; //print result result print; "\n" print; ) ) fib(5)