我刚刚面对以下代码.
let rec Make_Segment list=
match list with
| [] ->[],[]
| hd::tail when hd<=tail.Head -> let current,rest=Make_Segment tail
hd::current,rest
| hd::tail when hd>tail.Head -> [hd], tail
let segments= [3;4;5;5;1;2;3]
Make_Segment segments
Run Code Online (Sandbox Code Playgroud)
它是一个递归函数,总是返回两个列表.但正如您所看到的,它始终使用一个参数,即list匹配中的参数.那么第一个论点在哪里?
它怎么样?
在match语句中,list参数通过语法分为两个值hd::tail.这将匹配任何非空的列表(这也是为什么还需要与空列表匹配的原因),并且列表的第一项将被赋予名称hd,而列表的其余部分获取名称tail.(如果原件list中只有一个项目,那么tail现在将是一个空列表).
然后,当进行递归调用时,它返回两个列表的元组,这些列表由赋值进行解构let current,rest=Make_Segment tail.第一个列表分配给current,第二个列表分配给rest.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |