需要列表的原始长度作为 Haskell 中的“变量”,但它会随着递归而不断变化 [重复]

Posted

技术标签:

【中文标题】需要列表的原始长度作为 Haskell 中的“变量”,但它会随着递归而不断变化 [重复]【英文标题】:Need the original length of a list as a "variable" in Haskell, but it keeps changing with recursion [duplicate] 【发布时间】:2022-01-04 05:48:01 【问题描述】:

我在 Haskell 中有一个函数,我需要一个列表的原始长度来充当 C 中的静态变量,即当我第一次接受它时列表的长度就是我需要的值。

我正在递归地更改列表(即通过drop),因为这是函数首先工作所必需的,但这当然也会更新列表的长度,我不确定我如何访问列表的原始长度,就像我接收它时一样。

我的函数范围似乎存在问题,我需要更改我想要的这个值的范围,这样它就不会随着列表上的递归而改变。我不确定保留列表原始长度的理想方法究竟是什么。

【问题讨论】:

使用内部函数并将列表的原始长度传递给它 很有可能您只认为需要列表的长度,但实际上不需要。 【参考方案1】:

如果您想要一个值,请保留该变量。这通常使用辅助函数来实现:

myfunction xs = helper xs
  where
    len = length xs
    helper [] = 0
    helper ys = len + helper (drop 1 ys)

【讨论】:

以上是关于需要列表的原始长度作为 Haskell 中的“变量”,但它会随着递归而不断变化 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

简单Haskell函数中的中间值

Haskell - 迭代和填充列表

haskell 中的***可变变量

Haskell,树中的列表列表

为啥这个 Haskell 代码可以成功地处理无限列表?

比较列表haskell中的所有元素[重复]