曾经有人说数学是自然科学中的皇冠,而且总是尽力使自己和其他学科保持距离.而其他学科总是力求和数学搭上关系,如此便可以身价百倍.当年恩格斯曾经说唯一没有运用数学的学科生物学,最终也被孟德尔抓住了统计学的尾巴.
Functional Programing是厕身于象牙塔里的精灵,总是力图保持和现实的距离,并以纯粹的血统为荣,如今,也越来越多的被其他语言所攀附,Lambda演算似乎要成为一波语言技术的弄潮儿.作为典型的cpper,熟悉的元模板编程简直就是C++版的函数式编程,boost.lambda这样的库也是运用广泛的。是到了学习函数式编程的时候了,因此决定学习号称纯粹的函数式语言的Haskell.
资源:
http://www.haskell.org/
和google
环境:
我选择了GHC,不过遗憾是的我使用的编辑器notepad++不支持Haskell语法高亮. :-(
开始:
1.Hello world
putStrLn "Hello world!"
这个太简单,没意思。真正的"Hello world"应该是阶乘,如果在GHC交互模式下,可以用let定义函数:
let fac n = if n = 1 then 1 else n * fac(n-1)
fac 5
2.常数
x = 3
y = 4
z = x +y
不同于命令是语言,这里是描述而不是赋值,而且,一旦定义了,就不可以修改,类似C++中的const 常量
3.类型
Haskell是强类型的,(个人感觉,比C++还要强),但是,定义函数的时候却不需要指定参数类型。Haskell有参数类型推导机制,类似template的参数推导。而且,也可以指定函数的类型(很像参数特化?),帅呆了!而且,因为没有隐式类型转换的麻烦,因此,类型系统极其强大。
4.系统数据类型
Int有大小限制,Integer没有限制!寻找BigInt的Cpper们惭愧啊!
5.类型定义
inc ::Num a => a -> a --在此定义类型系统,可以不是精确类型,a类似template中的T
inc x = x + 1
6.函数重载 || 递归终结
pow2 0 = 1
pow2 n = 2 * pow2 (n-1)
像不像函数重载?pow2 0 = 1实在是像极了元模版编程中的递归终结手法。
先记这些,highorder的部分我得好好学学呢。
Functional Programing是厕身于象牙塔里的精灵,总是力图保持和现实的距离,并以纯粹的血统为荣,如今,也越来越多的被其他语言所攀附,Lambda演算似乎要成为一波语言技术的弄潮儿.作为典型的cpper,熟悉的元模板编程简直就是C++版的函数式编程,boost.lambda这样的库也是运用广泛的。是到了学习函数式编程的时候了,因此决定学习号称纯粹的函数式语言的Haskell.
资源:
http://www.haskell.org/
和google
环境:
我选择了GHC,不过遗憾是的我使用的编辑器notepad++不支持Haskell语法高亮. :-(
开始:
1.Hello world
putStrLn "Hello world!"
这个太简单,没意思。真正的"Hello world"应该是阶乘,如果在GHC交互模式下,可以用let定义函数:
let fac n = if n = 1 then 1 else n * fac(n-1)
fac 5
2.常数
x = 3
y = 4
z = x +y
不同于命令是语言,这里是描述而不是赋值,而且,一旦定义了,就不可以修改,类似C++中的const 常量
3.类型
Haskell是强类型的,(个人感觉,比C++还要强),但是,定义函数的时候却不需要指定参数类型。Haskell有参数类型推导机制,类似template的参数推导。而且,也可以指定函数的类型(很像参数特化?),帅呆了!而且,因为没有隐式类型转换的麻烦,因此,类型系统极其强大。
4.系统数据类型
Int有大小限制,Integer没有限制!寻找BigInt的Cpper们惭愧啊!
5.类型定义
inc ::Num a => a -> a --在此定义类型系统,可以不是精确类型,a类似template中的T
inc x = x + 1
6.函数重载 || 递归终结
pow2 0 = 1
pow2 n = 2 * pow2 (n-1)
像不像函数重载?pow2 0 = 1实在是像极了元模版编程中的递归终结手法。
先记这些,highorder的部分我得好好学学呢。