繁体   English   中英

请解释这个Seq.map调用在F#中会做什么

[英]Please explain what this Seq.map call will do in F#

我在F#的exercism.io解决方案中遇到了以下行,但我有问题,抓住Seq.map部分会做。 (可能很明显,但这里的数字是整数)

let numberSequence = number |> string |> Seq.map (float >> (-) 48.0 >> (-) 0.0)

有人可以为我阐明这个吗?

我猜这个函数是这样的:

let numberSequence number = number |> string |> Seq.map (float >> (-) 48.0 >> (-) 0.0)

然后:

> numberSequence 654 ;;
val it : seq<float> = seq [6.0; 5.0; 4.0]

如果是这样,它的作用是:

number |> string将数字转换为字符串

string |> Seq.map这可能很棘手,一个字符串实现IEnumerable,所以它可以解释为chars seq<char>的序列。 所以这里每个char都“映射”到一个函数。

现在让我们来看看这个函数,结果证明它是一个函数组合:

float将char转换为float

(-) 48.0它就像fun x -> 48. - x所以它将之前的结果减去48

(-) 0.0类似地将0减去前一个结果。

地图部分中的函数试图获取char的数值。 Seq.map将该函数应用于每个元素,并为每个结果构造一个新序列。

作为旁注,该功能可以很容易地写成:

let numberSequence number = number |> string |> Seq.map System.Char.GetNumericValue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM