functor相关内容
在Haskell中,应用程序被认为比函数器更强,这意味着我们可以使用应用程序Like来定义函数器 -- Functor fmap :: (a -> b) -> f a -> f b fmap f fa = pure f fa 和Monad被认为比Applicative&;Functor更强,这意味着。 -- Functor fmap :: (a -> b) -> f
..
由于Functor-Applicative-Monad Proposal,Monad是应用类的子类,而应用类又是函数子类。从数学上讲,这似乎是一个明智的选择,我对此没有任何问题。 然而,令我恼火的是,即使fmap和pure和的相应定律无论如何都是由单子定律固定的,也需要写下函数式和应用实例。事实上,在上面的链接提案中,它们自己写道:&您只需添加以下代码即可从Monad派生这些实例:
..
这里有类似的问题,但它们与特定的编程语言有关,我正在寻找概念级别的答案。 据我所知,函数器本质上是不变的容器,它公开派生另一个函数器的map()API。哪项添加使将特定的函数器称为单体成为可能? 据我所知,每个单子都是函子,但并不是每个函子都是单子。 推荐答案 (请注意,这将是对范畴理论概念的简化解释) 函数器 函数器是从一组值a到另一组值a -> b的函数。对于编
..
使用函数器和函数指针有什么不同。 例如 //Functor struct add_x { int x; add_x(int y):x(y){} int operator()(int y) { return x+y; } }; //Function int (func)(int x) { return
..
是否可以在C++20中实现泛型多功能函数组合/流水线? struct F{//1st multi-functor template void operator()(const T& t){/*...*/} }; struct G{//2nd multi-functor template void operator()(const T&
..
导入 Control.Applicative主 = 打印 $ fmap (*2) (1,2) 产生(1,4).我希望它产生 (2,4) 但该函数仅应用于元组的第二个元素. 更新我几乎马上就明白了这一点.我会在一分钟内发布我自己的答案.. 解决方案 Functor 实例实际上来自 GHC.Base 模块. 尝试编写我想要的实例,我可以看到它不会工作,给定元组的定义;实例只需要一
..
您可以使用 =.. 来转换简单的术语. ?- x(a,b,c) =.. A.A = [x, a, b, c]. 复杂的术语呢: x(a,b(c,d)) ==>[x,a,[b,c,d]]x(a,b(c,q(d))) ==>[x,a,[b,c,[q,d]]] 然后作为单独的任务,我想用改变的函子重新生成条款: x(a,b(c,d)) ==>[x,a,[b,c,d]] ==>y(a,f(c,d
..
随机示例:给定以下 [Maybe [a]], x = [Just [1..3], Nothing, Just [9]] 我想通过3层映射f = (^2),从而得到 [只是 [1,4,9],Nothing,Just [81]] 最简单的方法似乎是 (fmap .fmap .fmap) (^2) x where fmap .地图.fmap 类似于 fmap,但它有 3 层深. 我怀疑
..
我正在关注这个 函数对象教程 复制下面的意大利面: 我无法理解以下内容: 谓词应始终实现为无状态函数对象,以避免出现意外结果.无法保证算法在内部复制谓词的频率.因此,将谓词实现为有状态的函数对象可能会产生未执行的结果. 示例如下: #include #include #include #include 类谓词{上市:谓词(int 条件):条件_(条件),状态_(0){}b
..
我发现 binary_function 已从 C++11 中删除.我想知道为什么. C++98: template 结构更少:binary_function {bool operator() (const T& x, const T& y) const {return x
..
比较 double average = CalculateAverage(values.begin(), values.end()); 与 double average = std::for_each(values.begin(), values.end(), CalculateAverage()); 在函数上使用函子有什么好处?第一个是不是更容易阅读(甚至在添加实现之前)? 假设函
..
这个问题开始于 我翻译的“ML for the Working Programmer"(WorldCat) 由 LC PAULSON 到 F# 使用函子作为示例. 最终希望翻译“纯函数数据结构"(WorldCat)作者 Chris Okasaki,使用函子. 阅读“类别类型和结构 - 类别理论简介供计算机科学家使用"(WorldCat),作者:Andrea Asperti 和 Giuse
..
ML 函子可以用 .NET 接口和泛型实际表达吗?是否有一个高级 ML 函子使用示例来对抗此类编码? 答案摘要: 在一般情况下,答案是否定的.ML 模块提供功能(例如通过签名共享规范 [1]) 不直接映射到 .NET 概念. 但是,对于某些用例,可以翻译 ML 习语.这些情况不仅包括基本的 Set 函子 [2],还有 monad 的函式编码 [3],甚至更高级的 Haskell
..
F# 是从 OCaml 派生出来的,但是缺少或添加了哪些主要项目?具体来说,我很好奇可用于学习 OCaml 的资源是否对想要学习 F# 的人也有用. 解决方案 主要区别在于 F# 不支持: 函子 OCaml 风格的对象 多态变体 camlp4/5 预处理器或扩展点 (ppx) 此外,F# 对标记参数和可选参数有不同的语法. 理论上,不使用这些特性的 OCaml 程序
..
有人能简单解释一下两者之间的区别吗?我没有完全理解 monad 是内函子而不是函子的部分. 解决方案 一个函子可以从一个类别转到另一个类别,一个内函子是一个起始类别和目标类别相同的函子. 与内同态与态射相同. 那么,为什么 monad 必须是内函子? 有一句名言“Monads 只是属于内函子范畴的幺半群".幸运的是,其他人已经在在这个答案中很好地解释了这一点. mo
..
Standard ML 中的Functor 与模块系统相关,可以根据其他结构生成结构.下面给出了一个为各种类型的列表生成列表组合子的函子的例子,但这个例子有一个问题: 各种类型的列表都有优点——例如,惰性列表可以无限长,连接列表有一个 O(1) 连接运算符.但是当所有这些列表类型都符合相同的签名时,函子只能使用它们的通用属性. 因此,我的问题是:当函子有用并且各种生成的结构不会失去它们
..
我一直在学习函数式编程,并遇到过 Monad、Functor 和 Applicative. 根据我的理解,以下定义适用: a) ( A=>B ) => C[A] => C[B] |函子 b) ( A=>C[B] ) => C[A] => C[B] |单子 c) ( C[A=>B] ) => C[A] => C[B] |适用 (参考:https://thedet.wor
..
在 Boost Signals 库中,他们正在重载 () 运算符. 这是 C++ 中的约定吗?用于回调等? 我在一位同事(他恰好是 Boost 的忠实粉丝)的代码中看到了这一点.在所有 Boost 优点中,这只会让我感到困惑. 对此超载的原因有任何见解吗? 解决方案 重载 operator() 的主要目标之一是创建一个函子.函子的行为就像函数一样,但它的优点是它是有状态的
..
想要将 boost::bind 传递给需要普通函数指针(相同签名)的方法. typedef void TriggerProc_type(Variable*,void*);void InitVariable(TriggerProc_type *proc);boost::function触发过程...InitVariable(triggerProc);错误 C2664:“InitVariable":
..
是否存在创建函子比使用 lambda 更有意义的情况? 我知道我的问题实际上是 何时在函子上使用 lambda,但我想不出在实践中函子会首选而不是 lambda 的情况.对此有什么想法吗? 解决方案 lambda 是一个函子 - 只是用更短的语法定义. 问题是这种语法是有限的.它并不总是允许您以最有效和最灵活的方式解决问题 - 或者根本不解决.在 C++14 之前,operat
..