人们会在哪个函数式编程函数中增长一组项目?
这三个中的哪一个(如果有的话(请提供替代方案))将用于将元素添加到项目列表中?
- 还折叠
- 地图
- 过滤器
;如何添加项目? (附加到末尾/插入在工作项/其他之后)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
这三个中的哪一个(如果有的话(请提供替代方案))将用于将元素添加到项目列表中?
;如何添加项目? (附加到末尾/插入在工作项/其他之后)
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
函数式编程中的列表通常被定义为递归数据结构,它要么是特殊的空值,要么由一个值(称为“头”)和另一个列表(称为“尾”)组成。在 Haskell 中:
要在头部添加元素,可以使用“cons”:该函数接受头部和尾部,并生成相应的列表。
要在末尾添加元素,您需要递归列表以添加它。您可以通过折叠轻松完成此操作。
要在中间添加元素,您需要使用类似的策略:
请注意,除了头部插入之外,这些操作会跨越整个列表,这可能会成为性能问题。
A list in functional programming is usually defined as a recursive data structure that is either a special empty value, or is composed of a value (dubbed "head") and another list (dubbed "tail"). In Haskell:
To add an element at the head, you can use "cons": the function that takes a head and a tail, and produces the corresponding list.
To add elements at the end, you need to recurse down the list to add it. You can do this easily with a fold.
To add elements in the middle, you need to use a similar strategy:
Notice that except for insertions at the head, these operations cross the whole list, which may become a performance issue.
“cons”是大多数函数式编程语言中用于构造各种数据结构(包括列表)的低级操作。在 lispy 语法中,它看起来像这样:
视觉上这是一个链接列表
或者也许更准确地说
当然,您也可以构造各种带有 cons 的“树”状数据结构。
树状结构可能看起来像这样,
即视觉上:
然而,大多数函数式编程语言将提供许多“高级”函数来操作列表。
例如,在 Haskell 中,有
只是提供一个结论性意见,您通常不会像您可能认为的那样操作列表中的各个元素,这是一种命令式思维方式。您更有可能使用递归函数或该行中的某些内容来复制整个结构。编译器/虚拟机负责识别何时可以就地修改内存并更新指针等。
"cons" is the low-level operation used in most functional programming languages to construct various data structure including lists. In lispy syntax it looks like this:
Visually this is a linked list
Or perhaps more accurately
Of course you could construct various "tree"-like data structures with cons as well.
A tree like structure might look something like this
I.e. Visually:
However most functional programming languages will provide many "higher level" functions for manipulating lists.
For example, in Haskell there's
Just to offer a concluding remark, you wouldn't often operate on individual elements in a list in the way that you're probably thinking, this is an imperative mindset. You're more likely to copy the entire structure using a recursive function or something in that line. The compiler/virtual machine is responsible recognizing when the memory can be modified in place and updating pointers etc.