我在F#的exercism.io解决方案中遇到了以下行,但我有问题,抓住Seq.map部分会做.(可能很明显,但这里的数字是整数)
let numberSequence = number |> string |> Seq.map (float >> (-) 48.0 >> (-) 0.0)
Run Code Online (Sandbox Code Playgroud)
有人可以为我阐明这个吗?
我猜这个函数是这样的:
let numberSequence number = number |> string |> Seq.map (float >> (-) 48.0 >> (-) 0.0)
Run Code Online (Sandbox Code Playgroud)
然后:
> numberSequence 654 ;;
val it : seq<float> = seq [6.0; 5.0; 4.0]
Run Code Online (Sandbox Code Playgroud)
如果是这样,它的作用是:
number |> string 将数字转换为字符串
string |> Seq.map这可能很棘手,一个字符串实现IEnumerable,因此它可以被解释为一系列字符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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |