当面对新的编程术语时,我首先尝试从语义和词源的角度(也就是说,当它们不是晦涩的缩略语时)对它们进行推理。例如,你可以从一个小的希腊语/拉丁语的帮助中得到一些提示,比如多态性,甚至Monad。至少,一旦你学会了这个概念,这个词本身就会和它很好地吻合。我想这就是为什么我们命名事物的部分原因,以使心理表征和联想更加流畅。
我发现函子是个更难解决的难题。并不是C++的意思--一个作为函数(funct-)的对象(-or),但是各种功能意义(在ML、Haskell中)肯定让我感到困惑。
从(数学)函数维基百科文章看,这个词似乎是从语言学借来的。在这种情况下,我想我明白了“函数词”或“函子”的意思--一个“使功能”而不是“有意义”的词。但我不能把它和范畴理论中的函子概念联系起来,更不用说函数式编程了。我想象一个函子是一个创建函数的东西,或者是一个函数的行为,或者是“函数构造函数”的缩写,但是这些似乎都不适合.
有经验的函数式程序员是如何解释这一点的?他们只是需要任何标签,把一个概念放在前面,并对它很好?一般来说,这不是为什么高级函数式编程对于凡人来说很难理解,比如说,OO --非常抽象,因为你不能把它与任何熟悉的东西联系起来?
请注意,我不需要函子的定义,只需要一个能让我把函子与更有形的东西联系起来的解释,如果有的话。
发布于 2014-08-21 17:28:48
在范畴理论中,函子通过描述一个范畴到另一个范畴的某些或全部映射来描述范畴之间的关系。有太多的哲学思想被包裹在这个(都是美丽的)中,很难说出很多与编程或其他现实世界的东西有关的东西,这些东西并没有剥夺它内在的完整性,但是这里就这样了。
设想一个数据集,以及您可以在该数据集上执行的一组函数。现在,想象另一个数据集(可能看起来或感觉与第一个数据集非常不同),以及您可以在该数据集上执行的一组函数。两个dataset+function ' things‘之间的函子会以有意义的方式将dataset+function事物1映射到dataset+function thing 2,即将函数与函数关联起来,从而保留事物之间函数的一些性质。因此,函子表达“意义”与“事物”中的功能所表达的“意义”之间的关系。
这几乎就像编程中的模式--第一个数据集和函数‘东西’可能是‘登记投票的人’,‘投票历史’和‘可能投票给不同各方的函数/映射’,第二个数据集和函数‘东西’可能是‘原子中的夸克群’和函数‘在不同引力影响下的自旋相互作用预测’和‘总夸克崩溃可能性’或类似的奇怪东西。一个函子会在一个‘世界’(数据集和它上的函数)和另一个世界之间映射,这样你就可以谈论你如何测试/表达一个世界中功能结果的真相,并在另一个世界中传递结果,因为你知道函数和数据集是如何以一种特定的方式关联的。
函子映射语义之间的关系,即是表示功能系统意义之间共性的高阶机制。
抱歉,这是我在“现实世界”总结中所能表达的范畴理论函子。
发布于 2014-08-21 17:17:58
据我所知,它们只是你需要记住的数学单词,类似于“低音词”。他们没有为我点击,直到我不再认为它们是一个独立的抽象概念,它们的名字对某些人来说肯定是有意义的,并且开始把它们看作是那些类型实现的糟糕的接口。
没有类别理论的历史包袱,程序员会把Functor称为Mappable或类似的东西。唉,他们没有问我们,所以我们被数学家编造的名字困住了。
https://softwareengineering.stackexchange.com/questions/254016
复制相似问题