函数式数据结构-列表
在开始之前我们先了解几个名词:
1、什么是函数式编程:函数式编程属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用,可以说是面向过程的程序设计。
2、函数式编程的优势:
1)函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。
2)易于"并发编程" 。
3)函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果必定相同。
3、什么是函数式数据结构:函数式数据结构只能被纯函数操作,纯函数一定不能修改原始数据结构或者产生副作用。函数式数据结构被定义为不可变的。
列表是由两个链接元素组成的递归数据结构:头部与尾部。
/// <summary>
/// 函数式列表
/// </summary>
/// <typeparam name="T"></typeparam>
public sealed class FList<T>
{
public T Head { get; }
public FList<T> Tail { get; }
public bool IsEmpty { get; }
private FList(T head, FList<T> tail){
Head = head;
Tail = tail.IsEmpty? FList<T>.Empty:tail;
IsEmpty = false;
}
private FList(){
IsEmpty = true;
}
public static FList<T> Cons(T head, FList<T> tail)
{
return tail.IsEmpty ? new FList<T>(head, Empty) : new FList<T>(head, tail);
}
public FList<T> Cons(T element)
{
return FList<T>.Cons(element, this);
}
public static readonly FList<T> Empty = new FList<T>();
}
测试:
FList<int> list1 = FList<int>.Empty;
FList<int> list2 = list1.Cons(1).Cons(2).Cons(3);