有没有办法在进行递归时将列表的长度保存在变量中?
Is there a way to save the length of a list in a variable while doing recursion?
假设我有一个递归函数,它接受两个列表和 returns 一个像这样的 int
fn ys (x:xs)
| --some condition = original length of (x:xs)
| otherwise = fn ys xs
如果条件一为真,我需要 return 我的输入列表的原始长度(在递归干扰它之前)。
有没有办法保存原来的长度?
您可以使用 "worker" 函数(传统上称为 go
)进行递归,它允许您引用原始参数并定义额外的变量:
fn ys xs' = go xs'
where
l = length xs'
go (x:xs)
| --some condition = l
| otherwise = go xs
您可能还想要 go []
的案例。
假设我有一个递归函数,它接受两个列表和 returns 一个像这样的 int
fn ys (x:xs)
| --some condition = original length of (x:xs)
| otherwise = fn ys xs
如果条件一为真,我需要 return 我的输入列表的原始长度(在递归干扰它之前)。 有没有办法保存原来的长度?
您可以使用 "worker" 函数(传统上称为 go
)进行递归,它允许您引用原始参数并定义额外的变量:
fn ys xs' = go xs'
where
l = length xs'
go (x:xs)
| --some condition = l
| otherwise = go xs
您可能还想要 go []
的案例。