函数式编程是一种基于使用函数构建抽象,避免副作用和状态变化的编程范例。纯函数编程是线程安全的。
P.S.例子是类似scala的,但语言并不重要,我对整体的函数式方法很感兴趣。 通常我看到这样的图案 外部世界 -> 控制器 -> serviceA -&...
给定向量 v 和 fn f,如何生成矩阵 {v, f(v), f(f(v)), ... f^k(v)}?
我有一个向量x和一个函数f。我需要生成第一列是 v、第二列是 f(v) 的矩阵,依此类推,直到最后一列 f^k(v)。 在函数式语言中,我可以使用 u...
我想使用 .apply 方法在 pandas 中创建一个新列,我可以在其中传递自定义函数 df["newcol"] = df["oldcol"].apply(lambda x: x + 1) 或者 df["newcol"]...
在 Enumerable Protocol 官方文档中找到的 Elixir 代码中每个枚举中 acc 和 x 的值是多少?
我正在尝试剖析和理解 acc/0 和 reducer/0 在可枚举协议中如何工作。 def map(可枚举,有趣) 做 减速器 = fn x, acc -> {:cont, [fun.(x) | acc]} 结束 枚举...
我什么时候应该以柯里化形式编写函数?与我的想法不符,需要纠正。 作为我学习链接的一部分,这就是我对函数柯里化的理解。下面是一个例子...
我正在努力应对mypy。作为练习,我试图为一些常见的高阶函数找出正确的类型注释。但我不太明白为什么下面的代码...
在 Elixir 中,有一个很棒的管道操作符,其工作方式如下: “你好世界!” |> String.split(" ") |> Enum.map(&String.capitalize/1) |> 枚举.join 在 Ruby 中...
我想在 Option 的上下文中组合两个endofunctor。我想要的组合是通过 Category.compose 将两个 endofunctor 组合成一个。我发现 MonoidK[Endo].algebra[*] 实例
我有两个非常相似的函数,但打字稿只能推断其中一个的返回值: 接口 URItoKind {} 输入 URIS = keyof URItoKind; 类型 种类 我有两个非常相似的函数,但打字稿只能推断其中一个的返回值: interface URItoKind<A> {} type URIS = keyof URItoKind<any>; type Kind<URI extends URIS, A> = URItoKind<A>[URI]; const URI = "Option"; export type URI = typeof URI; interface URItoKind<A> { readonly [URI]: Option<A>; } class Option<A> { static of: <A>(a: A) => Option<A>; } function test1<F extends URIS, A, B>(f: (a: A) => Kind<F, B>): Option<B>; function test2<F extends URIS>(): <A, B>(f: (a: A) => Kind<F, B>) => Option<B>; const func = (x: number) => Option.of(x.toString()); // (x: number) => Option<string> const r1 = test1(func); // Option<unknown> - Doesn't work const r2 = test2()(func); // Option<string> - Works Fine 游乐场链接 我希望有人可以向我解释问题出在哪里。这是预期的还是错误?是否有某种解决方法可以使 test1 工作而无需手动指定类型? 这是由于 TypeScript 有时为了性能而“懒惰”的方式造成的。 测试1 function test1<F extends URIS, A, B>(f: (a: A) => Kind<F, B>): Option<B>; 一旦您调用 test1(func),TypeScript 就会尝试推断类型。问题是 TS 采用 F extends URIS 并用它来推断 Kind<F, B>。 TypeScript 在某些情况下会针对性能进行优化,在这种情况下,TypeScript 会变得“懒惰”,以便更快地推断类型。 测试2 function test2<F extends URIS>(): <A, B>(f: (a: A) => Kind<F, B>) => Option<B>; 在这种情况下,你必须打电话。第一次调用会触发 TypeScript 尝试推断 F,但没有足够的信息,因此 TypeScript 会等到第二次调用。在第二次调用中,没有像 F extends URIS 这样的“提示”,因此 TypeScript 推断出 F,但这一次它不会以懒惰的方式执行此操作。它会遍历所有通用类型,直到找到真正的答案。 解决方案 您可以消除通用约束F extends URIS以防止打字稿“懒惰”,而不提示意味着TS需要一直向下推断类型。 declare function test1<A, B>(f: (a: A) => Kind<URIS, B>): Option<B>; declare function test2(): <A, B>(f: (a: A) => Kind<URIS, B>) => Option<B>; 现在两者都按预期工作: const func = (x: number) => Option.of(x.toString()); // (x: number) => Option<string> const r1 = test1(func); // Option<string> - Works Fine const r2 = test2()(func); // Option<string> - Works Fine
如何使用高阶转换器函数自动推断 TypeScript 函数管道中的类型?
我正在构建一个模拟器,其中使用 fp-ts 中的管道通过各种函数逐步转换对象。为了使代码更具表现力,我使用高阶函数来创建...
Haskell 不允许改变全局变量,这是动态编程的关键概念,所以我想出了一个解决方案。 这依赖于 Haskell 的惰性求值和无限列表 难道我...
Haskell 和其他函数式编程语言都是围绕不维护状态的前提构建的。 我对函数式编程的工作原理和其中的概念仍然很陌生,所以我想知道我......
这个节目 {-# 语言 LambdaCase #-} 导入 Control.Concurrent (threadDelay) 导入 Control.Concurrent.Async (withAsync) 导入 Control.Exception(最后) 导入 Control.Monad(永远) 主要...
我知道一个问题,即 C++ 中闭包的行为与其他编程语言不同(它们扩展了捕获变量的生命周期并具有 GC) 如果我们写这样的代码 自动发电机()...
我已经完成了一些函数式编程,并且有一些在线参考资料,所以我发现基本的 Erlang 编程非常简单。 但由于我做了更多的过程/面向对象的编程...
我正在寻找一种根据元组出现的次数来过滤一组(或列表)元组的方法。 项目出现在元组的另一个位置之一中。 我当前的目标有点复杂,所以我划分...
我正在尝试基于 CoqExtLib 中定义的有限映射来执行以下证明。但是,我遇到了一个问题,证明中显示的 RelDec 实例与实例不同......
我目前正在通过用python编写monad库来自学函数式编程。我在类型提示方面遇到了麻烦。例如,Haskell 中有一个带有签名的函数 filterM...
我是Scheme的新手,已经使用麻省理工学院的Scheme有一段时间了。我试图了解如何实现流行的图算法,例如最短路径算法、BFS、DFS。有教程吗
为什么以下不起作用? A b1 = 新 B(); 函数函数 = x -> new B(); A apply = function.apply(b1); 它给出一个错误“需要类型捕获?...