Haskell中的map函数等效于C#


80

Haskell中的map函数有两个输入参数。第一个参数是一个函数,第二个参数是一个列表。map函数将作为输入参数传递的函数应用于列表中的所有元素,并返回一个新列表。

是否有C#等效于此功能?


1
您可能要签出F#。它弥合了C#和Haskell之间的鸿沟。
ChaosPandion 2010年

3
并不是的。它更像是“ OCaml for .NET”。
jrockway 2010年

2
更不用说所有ML系列语言(包括F#和Haskell)彼此之间的共同点要比与任何C系列语言都更多。任何可以处理F#的人都可能也可以处理Haskell或OCaml。
CA McCann 2010年

1
@ jrockway,@ camccann:我不是在谈论语言的语法。我的意思是F#不会强迫您始终使用纯函数样式。
ChaosPandion 2010年

Answers:



21

另一个备选方案Select,并SelectMany为编写自己的扩展方法。

public static IEnumerable<U> Map<T, U>(this IEnumerable<T> s, Func<T, U> f)
{
  foreach (var item in s)
    yield return f(item);
}

感谢Wes Dyer提供的这种出色的扩展方法!:)有关更多详细信息,请参见发布


15

由于SelectSelectMany已经提到的,我会回答一个额外的问题,你没有问:fold发现为骨料

现在,每个阅读此书的人都应该具备充分的条件,可以成为使用Language Y习语编写Language X的那个家伙,所以为了您的C#程序员同伴,不要太过分


4
现在,camccann,即使您必须锤击钉子,也可以将功能性扳手插入工具箱中没有任何问题。您可能需要拧紧一些螺栓。
ChaosPandion

4
@camccan Functional C#确实非常不错。只是因为语言不是严格的功能并不意味着大多数.NET程序员不会从巨大建筑的东西中受益很多更多的功能。

4
使用C#提供的功能编程功能是一个好主意。另一方面,强迫C#进入功能性习语,使其无法很好地支持(例如,在Haskell中非常流行的咖喱式局部应用程序)可能会让您头疼,使您的代码模糊不清,并惹恼其他需要工作的人用它。
CA McCann 2010年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.