有没有办法在进行递归时将列表的长度保存在变量中?

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 [] 的案例。