将 2 个列表函数合并为 1 个?
我如何将以下两个函数合并
replaceNth n newVal (x:xs)
| n == 0 = newVal:xs
| otherwise = x:replaceNth (n-1) newVal xs
replaceMthNth m n v arg = replaceNth m (replaceNth n v (arg !! m)) arg
为一个函数?
是否可以?
How would I combine the following 2 functions:
replaceNth n newVal (x:xs)
| n == 0 = newVal:xs
| otherwise = x:replaceNth (n-1) newVal xs
replaceMthNth m n v arg = replaceNth m (replaceNth n v (arg !! m)) arg
into a single function?
Is it possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这非常可怕,但它确实完成了工作:
This is pretty hideous but it does the job:
函数组合
Haskell 中的函数可以免费组合。例如,给定两个函数
f
和g
,您可以将它们组合成一个新函数:f 。 g
,它将g
应用于参数,然后将f
应用于结果。您应该能够在这里以相同的方式使用组合。Function composition
Functions in Haskell may be composed at no cost. E.g. given two functions,
f
andg
, you can compose them into a new function:f . g
, which appliesg
to an argument, then appliesf
to the result. You should be able to use composition in the same way here.好的,这里在全局命名空间中没有其他命名函数,或者使用任何
where
或let
子句或任何其他全局函数。Ok, here it is with no other named functions in the global namespace, or using any
where
orlet
clauses or any other global functions.我根本不明白问题是什么:),但这是我将如何实现它:
这样你就不需要遍历列表两次(第一次使用
!!
,第二次使用!!
)与replaceNth
的时间)I don't understand what the question is at all :), but here is how I would implement it:
This way you don't need to traverse the list twice (first time with
!!
, second time withreplaceNth
)这是一个奇怪的实现,它使用嵌套列表推导式对具有无限列表的 zip 重建 2d 列表结构:
Here's a grotesque implementation that rebuilds the 2d list structure with nested list comprehensions over zips with infinite lists: