gpt4 book ai didi

functional-programming - Rust 是否/将支持函数式编程习惯用法?

转载 作者:行者123 更新时间:2023-11-29 07:40:46 32 4
gpt4 key购买 nike

随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗?

  1. 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能否以语法上令人愉悦的方式链接/组合它们 [1]?

  2. 既然已经有了使用 ADT 的优雅方法,那么 monad 又如何,特别是为它们提供一些语法糖?

[1] Haskell 有 (.) 和 (>>>),C# 扩展方法和可选的 LINQ,D 有统一的函数调用语法。

最佳答案

Rust 没有 HKT,但它的迭代器确实支持使用高阶函数 (HOF) 的函数式编码,例如 mapfilter, fold 等,方便链接。

与函数式语言相比,细节有所不同 - 它们通常是垃圾收集器,而 Rust 程序以确定性方式处理内存管理,类似于 C++ RAII - 作为程序流程的一部分。

为了实现高效链接,各个 HOF 返回可组合的惰性表达式模板,您可以通过 .to_owned_vec().collect() 或其他。

在某些情况下,这不是必需的,返回的表达式模板本身就是一个迭代器,这可能就足够了。例如,您可以使用 for 循环对其进行迭代,或将其作为参数传递给通用函数。

参见:

C++11(带有额外的库)和 Rust 中都可能有类似的模式。 Rust 的泛型不如 C++ 模板强大,但默认情况下的不变性、面向表达式的语法、多态 lambda 和双向类型推断使它感觉更接近函数式语言。

关于“扩展方法”和统一调用语法,Rust 允许以类似的“开放世界”方式组织代码。您可以将具有更多方法的 impl 添加到库或程序中的任何类型,或者通过在其他库中实现您自己的特征方法来扩展现有类型。

与 C++ 相比,这使得使用可链接方法调用样式更容易(即更少需要修改或派生类型)。

请记住,Haskell 的很多习语都与纯度有关(例如 IO monad、镜头……),而 Rust 是多范式的,而不是纯函数式的。您可以在程序级别拥有一个纯函数以获得引用透明性的好处,但它的实现通过可变局部变量得到了简化。

关于functional-programming - Rust 是否/将支持函数式编程习惯用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374612/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com