3.3.4.1 用 C# 求列表中数字的和

728 篇文章 1 订阅
349 篇文章 0 订阅

3.3.4.1 用 C# 求列表中数字的和

 

只要使用 C# 命令式编程,并处理过标准的 .NET 数组或来自 System.Collections.Generic 的 List<T> 类,[ 写这个程序并不难, ]可能会创建一个变量total,并初始化为零,写一个 for 循环,迭代所有的数字,把每个元素加到 total 上(类似于 total + = list[i]);(或者,可以用 foreach 循环,这只是一个语法糖,能使写程序更方便,但概念仍是相同的。)

但是,使用函数式列表,不允许通过索引访问元素,也不支持 foreach,那么又该如何做呢4?为此,我们可以使用递归,写一个方法,处理列表的两种情况:空和 cons cell。可以在清单 3.15 中看到 C# 版本的 SumList 代码。

 

清单 3.15 对列表中元素求和 (C#)

int SumList(FuncList<int> numbers) {

 return numbers.IsEmpty ? 0 :             [1]

   numbers.Head + SumList(numbers.Tail);   [2]

}

var list = FuncList.Cons(1,FuncList.Cons(2,         |  用 1、2、3、4、5

 FuncList.Cons(3, FuncList.Cons(4,              | 创建列表

 FuncList.Cons(5, FuncList.Empty<int>())))));      |

 

int sum = SumList(list);    |  求和

Console.WriteLine(sum);  |  输出 15

 

SumList 方法首先检查列表是否为空。如果不为空,执行匹配的 cons cell分支[2],以递归方式调用 SumList 计算列表尾中元素的和,并将此结果加到保存在头中的值。这个递归调用执行,直至到达列表的结束,发现列表尾为空列表为止。对于空列表[1],函数终止,返回零。

接下来,我们使用非泛型的 FuncList 类中的工具方法 Cons 和 Empty,创建一个列表。创建过程有点冗长,要使之不那么困难,可以实现一个方法,使用通常的 .NET 集合创建函数式列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值