需要列表的原始长度作为 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 中的“变量”,但它会随着递归而不断变化 [重复]的主要内容,如果未能解决你的问题,请参考以下文章