Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 函数式编程中的数据类型和结构及相关行为_Types_Functional Programming - Fatal编程技术网

Types 函数式编程中的数据类型和结构及相关行为

Types 函数式编程中的数据类型和结构及相关行为,types,functional-programming,Types,Functional Programming,在大量阅读函数编程和lambda演算之后,我仍然不知道如何将行为与数据类型和结构联系起来。我猜我还是有错误的想法 除了恒等式函数之外,我还认为其他算术运算都依赖于特定于值类型或结构的规则 例如,矩阵、向量、标量、随机数分布和虚数都有自己的关联、交换和算术规则 类型和/或行为是如何附加到值和/或运算符的?与开发合适库的任何其他编程语言一样。 例如,考虑一个非常基本的演算,如归纳构造器(CIC)的演算,这与一个(类型化)lambda演算不太远。 CIC是Coq证明系统的核心:所有编写的内容都是这一基

在大量阅读函数编程和lambda演算之后,我仍然不知道如何将行为与数据类型和结构联系起来。我猜我还是有错误的想法

除了恒等式函数之外,我还认为其他算术运算都依赖于特定于值类型或结构的规则

例如,矩阵、向量、标量、随机数分布和虚数都有自己的关联、交换和算术规则


类型和/或行为是如何附加到值和/或运算符的?

与开发合适库的任何其他编程语言一样。 例如,考虑一个非常基本的演算,如归纳构造器(CIC)的演算,这与一个(类型化)lambda演算不太远。 CIC是Coq证明系统的核心:所有编写的内容都是这一基本演算,您仍然可以对您提到的所有数据类型(以及它们的原因)编写复杂的程序。
有助于理解lambda演算的一个关键点是所谓的Bohm-berardocci归纳类型编码(),它提供了处理整数、记录、列表、树等的主要技术。剩下的很简单。

谢谢你的指点。不幸的是,我试图检查博姆·贝拉杜奇,我完全迷路了。对我来说,似乎行话和符号惯例是这样的,只有那些已经知道答案的人才能理解解释。是否有代码(或英语)的实现?@Hurelu我添加了一个参考。对于Coq,有一本由Bertot和Casteran撰写的优秀著作《交互式定理证明和程序开发》。@Hurelu关键的直觉是,您用函数对归纳类型的对象c进行编码,实现对c上预先实例化的数据类型的遍历。但是细节需要一个小的入门课程,没有适用于所有函数式编程的通用解决方案。每种语言都可以独立完成。要么使用运算符重载,要么对每种类型使用不同的运算符。收到的答案(1.视情况而定,2.参加完整的课程,3.阅读一本书)表明这是一个糟糕的问题,或者至少没有很好的表述。我应该删除这个问题吗?我的想法是,如果一个值被锁定在一个monad中,如果我没有检查这个值,我怎么知道如何组合和操作。我知道我的想法是错误的,我认为我不是唯一一个。