- 论坛徽章:
- 0
|
如果哪里不正确,请指出,改之
看一个例子:
- --test.hs
- module Main where
- myIf::Bool->Int->Int->Int
- myIf cond a b = if cond
- then a
- else b
复制代码
这里定义了一个简单的模拟 if..then..else..表达式的函数 myIf
其类型为Bool->Int->Int->Int
其接受三个参数(虽然表达不正确,就这样形象的说吧)
功能:当 cond 为 True 返回 a,否则返回 b
加载此模块
:l test.hs
键入:
myIf ("fst" == "Fst") 1 (2+3)
你知道这个函数怎么运行的吗?
如果你没接触过函数式编程,
你会认为:解释器先把 ("fst" == "Fst") 和 (2+3) 分别计算为 False 和 5,然后把 False、1 和 5 绑定到 myIf 函数的三个参数 cond、a 和 b上,因为 cond 为 False,所以返回 5.
哈哈,错了!
注意:“当需要时才计算,不需要时就不计算”这句话!
add 函数运行的过程为:
解释器把 ("fst" == "Fst")、1、(2+3) 三个参数绑定到 myIf 函数的三个参数 cond、a 和 b 上,返回 if..then..else表达式的值。
这时需要求if "fst" == "Fst" then 1 else (2+3) 表达式的值,先计算 "fst" == "Fst" 为 False, 所以返回 (2+3) 表达式的值,
这时需要求 (2+3) 表达式的值,计算 (2+3) 表达式的值为 5,
所以返回 5。
[ 本帖最后由 izhier 于 2009-3-31 20:38 编辑 ] |
|