Questions tagged «functor»

术语“ functor”具有几种常见含义:1.功能对象。在面向对象的语言中,它是一项功能,允许将对象当作普通函数使用。2.处理类别之间映射的数学结构。在某些编程语言(尤其是Haskell)中,此概念是有用的抽象,在其中将其实现为类型类。3.在OCaml中,是一个模块,它将另一个模块作为参数。


6
作为模板参数传递的函数
我正在寻找涉及将C ++模板函数作为参数传递的规则。 C ++支持此功能,如此处的示例所示: #include <iostream> void add1(int &v) { v+=1; } void add2(int &v) { v+=2; } template <void (*T)(int &)> void doOperation() { int temp=0; T(temp); std::cout << "Result is " << temp << std::endl; } int main() { doOperation<add1>(); doOperation<add2>(); } 但是,学习这种技术很困难。谷歌搜索“作为模板参数的功能”并没有多大帮助。令人惊讶的是,经典的C ++模板《完整指南》也没有对此进行讨论(至少不是从我的搜索中获得)。 我的问题是这是否有效的C ++(或只是一些广泛支持的扩展)。 另外,有没有办法在这种模板调用期间允许具有相同签名的仿函数与显式函数互换使用? 下面确实没有工作,在上面的程序,至少在视觉C …

17
在函数式编程中,什么是函子?
在阅读有关函数式编程的各种文章时,我遇到过几次“ Functor”一词,但是作者通常认为读者已经理解了该词。在网上四处浏览时,要么提供了过多的技术说明(请参阅Wikipedia文章),要么提供了令人难以置信的模糊说明(请参阅此ocaml-tutorial网站上有关Functors的部分)。 有人可以友好地定义该术语,解释其用法,还可以提供一个有关如何创建和使用Functor的示例吗? 编辑:尽管我对术语背后的理论感兴趣,但对理论的兴趣不如对概念的实现和实际使用感兴趣。 编辑2:似乎正在进行一些跨终端操作:我专门指的是函数编程的Functors,而不是C ++的函数对象。

5
不是函子/函数/应用/单子的好例子?
在向某人解释什么是类型类X时,我努力地找到了恰好是X的数据结构的良好示例。 因此,我要求提供以下示例: 不是Functor的类型构造函数。 类型构造函数,是Functor,但不是Applicative。 类型构造器,它是一个Applicative,但不是Monad。 类型构造器,它是Monad。 我认为到处都有很多Monad的例子,但是与以前的例子有一些联系的Monad很好的例子可以使情况更完整。 我正在寻找彼此相似的示例,仅在对于属于特定类型类的重要方面有所不同。 如果能够在这个层次结构中的某个地方(在Applicative和Monad之间找到一个)Arrow的示例,那也很棒!

5
F#更改为OCaml [关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 4年前关闭。 改善这个问题 F#源自OCaml,但是缺少或添加了哪些主要项目?具体来说,我对于可用于学习OCaml的资源是否也对想学习F#的人有用感到好奇。
126 f#  ocaml  functor 


11
为什么不能在另一个函数中定义一个函数?
这不是lambda函数的问题,我知道我可以将lambda分配给变量。 允许我们声明而不在代码内部定义函数的意义何在? 例如: #include <iostream> int main() { // This is illegal // int one(int bar) { return 13 + bar; } // This is legal, but why would I want this? int two(int bar); // This gets the job done but man it's complicated class three{ int m_iBar; public: …

5
Monads作为附件
我一直在阅读类别理论中的单子。对monad的一个定义是使用一对伴随函子。一个单子通过使用这些函子的往返来定义。显然,附加语在范畴论中非常重要,但是我还没有看到关于伴随函子对Haskell monads的任何解释。有没有人想过?


3
所有固定大小的容器是否都具有很强的单曲面函子,反之亦然?
该Applicative类型类代表松懈monoidal函子是保留对输入功能类别的笛卡尔monoidal结构。 换句话说,给定的规范同构见证(,)形成一个单面结构: -- Implementations left to the motivated reader assoc_fwd :: ((a, b), c) -> (a, (b, c)) assoc_bwd :: (a, (b, c)) -> ((a, b), c) lunit_fwd :: ((), a) -> a lunit_bwd :: a -> ((), a) runit_fwd :: (a, ()) -> a runit_bwd :: a -> (a, …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.