现在的位置: 首页 > 综合 > 正文

FP编程实践:Haskell与F#的列表操作函数及其C++模拟实现

2013年08月28日 ⁄ 综合 ⁄ 共 2062字 ⁄ 字号 评论关闭
文章目录

Haskell代码

Haskell代码说明
  1. list(列表)为 Haskell的内置集合类型,其成员类型种类不受限制,但所有成员的类型必须一致。
    列表语法:[a1, a2, ..., an]
  2. 字符串在Haskell中被实现为成员类型为字符的list。
    如字符串"Hello World" 其实就是列表['H','e','l','l','o',' ','W','o','r','l','d']
  3. 预定义函数map(映射)
    参数:算法函数f(单参数),列表[a1, a2, ..., an]
    功能:返回新列表[b1, b2, ..., bn],其中bk = f(ak)
    第1行代码含义为:将字符串"Hello World"中的所有字符改为大写,返回所生成的新字符串。
  4. 预定义函数filter(过滤)
    参数:谓词函数p(单参数),列表[a1, a2, ..., an]
    功能:返回新列表[b1, b2, ..., bn2],其中bk = {am| p(am)=true}
    第4行代码含义为:过滤掉字符串"Hello World"中所有非小写字符,返回所生成的新字符串。
  5. 预定义函数foldl(左卷起)
    参数:算法函数f(双参数),初始状态值v,列表[a1, a2, ..., an]
    功能:返回 f( ... f(f(v, a1), a2), ..., an)
    第7行代码含义为:求 (((1-4)-8)-5) 的值。
  6. 预定义函数foldr(右卷起)
    参数:算法函数f(双参数),初始状态值v,列表[a1, a2, ..., an]
    功能:返回 f(a1, f(a2, ... f(an, v) ... ))
    第10行代码含义为:求 (4-(8-(5-1))) 的值。
 

F#代码

F#代码说明
  1. list(列表)为 F#的内置集合类型,其成员类型种类不受限制,但所有成员的类型必须一致。
    列表语法:[a1; a2; ...; an]
  2. Haskell的 map 函数相当于F#的 List.map 函数。
  3. Haskell的 filter 函数相当于F#的 List.filter 函数。
  4. Haskell的 foldl 函数相当于F#的 List.fold 函数。
  5. Haskell的 foldr 函数相当于F#的 List.foldBack 函数。 
 

C++代码

C++代码说明
  1. Haskell的列表(list)用tr1库的array组件来模拟。
  2. Haskell的 map 函数用标准库的transform算法来模拟。
  3. Haskell的 filter 函数用标准库的remove_if算法来模拟。
  4. Haskell的 foldl 函数和 foldr 函数用标准库的accumulate算法来模拟。

抱歉!评论已关闭.