| 运算符 | 含义 | 示例 |
| && | logical "and" | True && False |
| || | logical "or" | Flase || True |
| /= | 不等于 | 2 /= 3 |
| ^ | (整数次)幂 | 3 ^ 2 |
| ** | (浮点数次)幂 | 3 ^ 2.0 |
| ++ | 连接两个lists | [3,1,3] ++ [3,7] |
| : | 将一个元素插入列表头部 | 1:[2,3] |
| % | 比例(表示分数) | 11 % 29 |
2010年9月24日星期五
[Notes] Real World Haskell (1): 运算符
运算符列表:
2010年8月12日星期四
2010年6月2日星期三
长 夜 -- 丽尼
长 夜
丽尼
那时,我织着我自己底梦,你也有你自己底沉思,我们是各自组成着各自底世界,完全是陌生而不相识的人了呢。我们往往只各人沉浸在自己底哀愁之中,虽然彼此都深深地感觉了难耐的重负,然而也不肯互相告诉而做出安慰。唉,我们底郁结的心是什么时候始能消解呢?到了这里,我老实地给你说罢,我不能不希望一个末日底来到啊。
一个毁灭会给我们一个结束,那时,我们彼此将不存一点怨尤,这岂不更好么?为了我们底历史我是不能再有眼泪。
过去犹如梦一般地依稀,而且,我们是从来不曾有过欢乐的啊。如同在黑暗之中的一对伴侣,我们是这样偕行着的呀。
我搀扶着你,越过了森林与大海。你曾说“多么疲倦的途程”,我无语,因为我也有着自己底苦痛。你岂不曾看见有眼泪挂在我底眼角,而我也是几乎要昏倒于我底道路么?我忍住了叹息,这是因为有了你在我底身旁。岂不知道,一个叹息会在你底心里种下不幸的种子而给我以永远也不能解脱的哀愁么?我们是相互扶依的伴侣,而又是完全陌生的旅客哟。
在人海之中你是怎样地奔向了我来,而我也曾怎样地对你张开了我底寒冷的手臂!我曾说:“这个相逢会使你失去少女底容颜,而忘却青春底梦的呀。”一丝眼泪曾流下了你底眼前,而我亦只能忍住哭泣。于是我们互相结合了冰冷的唇,而偕行于这植满了哀愁与寂寞的道路了。你无言,时时窥视了我以沉默的眼。然而,这岂是我们底希求,这是我们底不幸哟。
夜已深了,去罢,我们:我们无有故旧,也无有朋友,我们只各人自己认取自己底道路,趁着这黑夜而作出一个渺茫的摸索罢。
到那时我们会有记忆,然而,记忆是属于过去的事了。我将在黑夜里频频呼唤你底名字;你将永远低垂了头,感觉辛苦。
我们将希望着毁灭如同一个救赎。我们将把生命看做不能摆脱的负累,在沉默的忆念之中我们将随着草木而腐朽。
世界底末日与宇宙底哀愁;我们将战栗于暗夜的途中,不复再有言语。在倦怠的途程之中我们会永远无有苏醒。
这样,我们结束了我们底梦寐罢。然而,我们仍将互相表示着平寂,如辞枝的落叶互相作出沉默之睇视而得到了解了。
一九三二年,三月。
——————————————————————
非常喜欢“希望着毁灭如同一个救赎”这句话。
2010年5月7日星期五
Mac OS X中不尽如人意的地方
可能吧发了一篇文章: Macbook Pro初体验, 基本说出了我想说的.
所以好处就不说了, 这里只列出使用时感觉到不方便的地方:
1. delete键
别告诉我"要删除文件只要拖到废纸篓就好了"
2. 图片预览时没有上一张和下一张图片这个按钮或者快捷键
别告诉我"先Ctrl-A, 然后再预览图片就好了"
3. Ctrl-X
每次要剪切文件的时候只能先复制再删除...
4. Finder没有地址栏
切换文件夹的时候不是特别方便.
5. 没有最大化
所谓的"最适合大小", 对我来说说服力不那么大.
暂时这么多.
ps. 那个磁性电源的设计虽然很人性化, 但是会不会容易吸附一些铁器从而造成短路啊?
所以好处就不说了, 这里只列出使用时感觉到不方便的地方:
1. delete键
别告诉我"要删除文件只要拖到废纸篓就好了"
2. 图片预览时没有上一张和下一张图片这个按钮或者快捷键
别告诉我"先Ctrl-A, 然后再预览图片就好了"
3. Ctrl-X
每次要剪切文件的时候只能先复制再删除...
4. Finder没有地址栏
切换文件夹的时候不是特别方便.
5. 没有最大化
所谓的"最适合大小", 对我来说说服力不那么大.
暂时这么多.
ps. 那个磁性电源的设计虽然很人性化, 但是会不会容易吸附一些铁器从而造成短路啊?
2010年5月5日星期三
[Note] Programming In Lua 笔记(2): 函数
21.
调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。
上述规则有一个例外,当函数只有一个参数并且这个参数是字符串或者表构造的时候,()可有可无:
22.
Lua函数实参和形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用nil补足。
23.
多返回值的函数调用 的 返回值:
1). 当调用作为表达式最后一个参数或者仅有一个参数时,根据变量个数函数尽可能多地返回多个值,不足补nil,超出舍去。
2). 其他情况下,函数调用仅返回第一个值(如果没有返回值为nil)。
3). 可以使用圆括号强制使调用返回一个值。
24.
特殊函数unpack,接受一个数组作为输入参数,返回数组的所有元素。unpack返回a所有的元素作为f()的参数
25.
可变参数:
Lua函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua将函数的参数放在一个叫arg的表中,除了参数以外,arg表中还有一个域n表示参数的个数。
26.
如果我们只想要string.find返回的第二个值。一个典型的方法是使用哑元(dummy variable,下划线):
初级语法知识似乎到这里就结束了, 后面的(从第6章再论函数开始)是稍微高级一点的内容了, 或者说是Real world Lua?
调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。
上述规则有一个例外,当函数只有一个参数并且这个参数是字符串或者表构造的时候,()可有可无:
print "Hello World" <--> print("Hello World")
dofile 'a.lua' <--> dofile ('a.lua')
print [[a multi-line message]]<--> print([[a multi-line message]])
f{x=10, y=20} <--> f({x=10, y=20})
type{} <--> type({})
22.
Lua函数实参和形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用nil补足。
-- 不知道Lua里面有没有与python类似的默认参数? 支持, 不过有所不同, 参见PIL 5.3 命名参数
23.
多返回值的函数调用 的 返回值:
1). 当调用作为表达式最后一个参数或者仅有一个参数时,根据变量个数函数尽可能多地返回多个值,不足补nil,超出舍去。
2). 其他情况下,函数调用仅返回第一个值(如果没有返回值为nil)。
3). 可以使用圆括号强制使调用返回一个值。
-- 这个部分的规则比较奇怪. 例子比较长, 就不贴出来了, 还是仔细看原文吧.
24.
特殊函数unpack,接受一个数组作为输入参数,返回数组的所有元素。unpack返回a所有的元素作为f()的参数
f = string.find
a = {"hello", "ll"}
print(f(unpack(a))) --> 3 4
25.
可变参数:
Lua函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua将函数的参数放在一个叫arg的表中,除了参数以外,arg表中还有一个域n表示参数的个数。
26.
如果我们只想要string.find返回的第二个值。一个典型的方法是使用哑元(dummy variable,下划线):
local _, x = string.find(s, p)
-- now use `x'
...
初级语法知识似乎到这里就结束了, 后面的(从第6章再论函数开始)是稍微高级一点的内容了, 或者说是Real world Lua?
[Note] Programming In Lua 笔记(1): 类型, 值, 表达式, 基本语法
1.
2.
-i选项要求Lua运行指定Chunk后进入交互模式.
3.
在交互模式下加载库:
4.
Lua的变量默认是全局的. 定义局部变量使用local关键字.
5.
注释:
单行注释:--
多行注释:--[[ --]]
6.
nil是Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量赋nil可以删除该变量。类似python中的None.
7.
在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。
8.
string
用单引号和双引号表示字符串, 多行字符串使用[[...]]
9.
运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。反过来,当Lua期望一个string而碰到数字时,会将数字转成string。
10.
".."在Lua中是字符串连接符,当在一个数字后面写".."时,必须加上空格以防止被解释错。
11.
显式将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。反之,可以调用tostring()将数字转成字符串.
12.
and和or的运算结果不是true和false,而是和它的两个操作数相关。
13.
一个很实用的技巧:如果x为false或者nil则给x赋初始值v
14.
C语言中的三元运算符
15.
not的结果只返回false或者true, 和and/or不同
16.
table是非常强大的一个存在. 它的索引下标"默认"从1开始, 而不是0.
它的元素可以是任何类型, 也可以包含数据成员(如下面的x和y).
可以指定索引(模拟字典):
强制下标从0开始:
在构造函数中域分隔符逗号(",")可以用分号(";")替代,通常我们使用分号用来分割不同类型的表元素。
17.
多个变量同时赋值:
当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略 容易引起误解的变量初始化:
18.
控制结构语句:
if ... then ... elseif ... then ... else ... end
while ... do ... end
repeat ... until ...
for ... do ... end
for ... in ... do ... end
19.
for语句有两大类:
第一,数值for循环:
注意: 这三个表达式只会被计算一次,并且是在循环开始前。
第二,范型for循环:
20.
Lua语法要求break和return只能出现在block的结尾一句(也就是说:作为chunk的最后一句,或者在end之前,或者else前,或者until前),例如:
prompt> lua -la -lb命令首先在一个Chunk内先运行a然后运行b。(注意:-l选项会调用require,将会在指定的目录下搜索文件,如果环境变量没有设好,上面的命令可能不能正确运行。)
2.
prompt> lua -i -la -lb将在一个Chunk内先运行a然后运行b,最后直接进入交互模式。
-i选项要求Lua运行指定Chunk后进入交互模式.
3.
在交互模式下加载库:
> dofile("lib1.lua") -- load your library
4.
Lua的变量默认是全局的. 定义局部变量使用local关键字.
--[[
应该尽可能的使用局部变量,有两个好处:
1. 避免命名冲突
2. 访问局部变量的速度比全局变量更快.
--]]
5.
注释:
单行注释:--
多行注释:--[[ --]]
6.
nil是Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量赋nil可以删除该变量。类似python中的None.
7.
在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。
8.
string
用单引号和双引号表示字符串, 多行字符串使用[[...]]
9.
运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。反过来,当Lua期望一个string而碰到数字时,会将数字转成string。
-- 尽量避免自动转换, 避免数字与字符串的混合操作.
10.
".."在Lua中是字符串连接符,当在一个数字后面写".."时,必须加上空格以防止被解释错。
11.
显式将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。反之,可以调用tostring()将数字转成字符串.
12.
and和or的运算结果不是true和false,而是和它的两个操作数相关。
a and b -- 如果a为false,则返回a,否则返回b
a or b -- 如果a为true,则返回a,否则返回b
-- pretty tricky
13.
一个很实用的技巧:如果x为false或者nil则给x赋初始值v
x = x or v等价于
if not x then
x = v
end
14.
C语言中的三元运算符
a ? b : c在Lua中可以这样实现:
(a and b) or c
15.
not的结果只返回false或者true, 和and/or不同
16.
table是非常强大的一个存在. 它的索引下标"默认"从1开始, 而不是0.
它的元素可以是任何类型, 也可以包含数据成员(如下面的x和y).
a = {x=0, y=0, 'aaa', 'bbb', {1,2}, 123}
可以指定索引(模拟字典):
opnames = {["+"] = "add", ["-"] = "sub", ["*"] = "mul", ["/"] = "div"}
强制下标从0开始:
days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
在构造函数中域分隔符逗号(",")可以用分号(";")替代,通常我们使用分号用来分割不同类型的表元素。
{x=10, y=45; "one", "two", "three"}
17.
多个变量同时赋值:
当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略 容易引起误解的变量初始化:
a, b, c = 0容易误解为c=0或者a=b=c=0
print(a,b,c) --> 0 nil nil
-- 尽量保证变量个数和值的个数一致
18.
控制结构语句:
if ... then ... elseif ... then ... else ... end
while ... do ... end
repeat ... until ...
for ... do ... end
for ... in ... do ... end
19.
for语句有两大类:
第一,数值for循环:
for var=exp1,exp2,exp3 doexp1,exp2,exp3分别为初始值,终止值,步进值. exp3默认为1, 此时可省略.
loop-part
end
注意: 这三个表达式只会被计算一次,并且是在循环开始前。
第二,范型for循环:
for i,v in ipairs(a) do print(v) end
for k in pairs(t) do print(k) end
20.
Lua语法要求break和return只能出现在block的结尾一句(也就是说:作为chunk的最后一句,或者在end之前,或者else前,或者until前),例如:
local i = 1有时候为了调试或者其他目的需要在block的中间使用return或者break,可以显式的使用do..end来实现:
while a[i] do
if a[i] == v then break end
i = i + 1
end
function foo ()
return --<< SYNTAX ERROR
-- 'return' is the last statement in the next block
do return end -- OK
... -- statements not reached
end
[Tips]如何快速打开豆瓣电台精简版
新建书签,地址为:
ps. 为什么我觉得豆瓣改版改得很失败呢?首先是打开电台比原来要麻烦;其次那个搜索栏不再是全能的了。
javascript:if(!window.open('http://douban.fm/radio','radiowin','height=186,width=420,toolbar=no,menubar=no,scrollbars=no,location=no,status=no')){location.href='http://douban.fm/radio'}
ps. 为什么我觉得豆瓣改版改得很失败呢?首先是打开电台比原来要麻烦;其次那个搜索栏不再是全能的了。
订阅:
博文 (Atom)
