Questions tagged «functional-programming»

函数式编程是一种编程范例,主要使用函数作为构建抽象和表达包含计算机程序的计算的手段。



3
如何为功能语言建模算法复杂度?
算法复杂度被设计为与较低级别的细节无关,但是它基于命令式模型,例如,数组访问和修改树中的节点需要O(1)时间。在纯功能语言中不是这种情况。Haskell列表需要线性时间才能访问。修改树中的节点需要制作树的新副本。 那么功能语言是否应该有替代的算法复杂性建模?

3
对纯/依赖类型系统的简要但完整的解释是什么?
如果简单,那么只需几句话就可以完全解释。可以对λ微积分进行此操作: λ演算是具有归约规则的语法(基本上是结构)(这意味着对特定模式的每次出现都会重复应用搜索/替换过程,直到不存在这种模式为止)。 语法: Term = (Term Term) | (λ Var . Term) | Var 归约规则: ((λ var body) term) -> SUBS(body,var,term) where `SUBS` replaces all occurrences of `var` by `term` in `body`, avoiding name capture. 例子: (λ a . a) -> (λ a a) ((λ a . (λ b . …

2
功能反应式编程和Actor模型如何相互关联?
FRP是关于通过纯函数流式传输事件和行为。Actor模型-至少在Akka中实现-是关于通过可能不纯的对象(称为actor)流式传输不可变消息(可以认为是离散事件)。 因此从表面上看,它们似乎相关。 关于它们之间的关系,我们还能说些什么?另外,对于其中哪一个可能更适合于不同的应用程序域又能说些什么呢?

2
Lambda微积分纯粹是语法吗?
我已经阅读了几周有关Lambda演算的信息,但是我还没有看到与现有数学函数有实质性区别的任何东西,我想知道这是否只是一种记号问题,或者是否有任何新的含义由lambda演算公理创建的属性或规则不适用于每个数学函数。因此,例如,我读过: “可以有匿名函数”:Lambda函数不是匿名函数,它们全称为lambda。如果名称不重要,则可以用数学符号将相同的变量用于不同的功能。例如,Galois Connection中的两个函数通常都被称为*。 “函数可以接受函数作为输入”:可以使用普通函数来完成此操作。 “功能是黑匣子”:只是输入和输出也是数学函数的有效描述... 这似乎是一个讨论或自以为是的问题,但我认为应该对这个问题有一个“正确”的答案。我想知道lambda演算是否只是用于数学函数的符号或语法约定,或者lambda和普通函数之间是否存在实质性或语义上的差异。


3
SML中的函子和范畴论之间有什么关系?
与Andrej Bauer在此答案中的陈述相同的想法 Haskell社区开发了许多受类别理论启发的技术,其中最著名的是monad,但不应将其与monad混淆。 之间是什么关系仿函数的SML和函子范畴论? 由于我不了解其他语言(例如Haskell或OCaml)中函子的详细信息,因此,如果有有价值的信息,请同时添加其他语言的部分。

2
类别理论的含义还不知道如何处理高阶函数?
在阅读乌代雷迪的 答案到什么是SML仿函数和类理论之间的关系?乌代州 范畴论尚不知道如何处理高阶函数。有一天,它将。 由于我认为范畴论可以作为数学基础,因此应该有可能推导所有数学和高阶函数。 那么,范畴论的含义是什么,尚不知道如何处理高阶函数?将类别理论视为数学基础是否有效?

2
计算表达式与monad相同吗?
此问题是从Stack Overflow 迁移而来的,因为可以在Computer Science Stack Exchange上回答。 迁移 5年前。 我仍在学习函数式编程(使用f#),最近我开始阅读有关计算表达式的文章。我仍然不完全理解这个概念,而让我不确定阅读所有有关monad的文章(其中大部分是基于Haskell撰写的)时,我不确定的是计算表达式和monad之间的关系。 写下所有内容后,这是我的问题(实际上是两个问题): 每个F#计算表达式都是monad吗?每个单子都能用F#计算表达式表示吗? 我已经读过Tomas Petricek的这篇文章,如果我对它的理解很好,它指出计算表达式比monad还要多,但是我不确定我是否正确解释了这一点。


2
类别理论(不是)用于编程?
在学习了Haskell和其他不是那么纯正的FP语言之后,我决定阅读有关类别理论的文章。在对分类理论有了很好的理解之后,我开始思考如何将分类理论的概念用于设计程序,但是无论我多么努力,这似乎都不是路要走。 在花了许多不成功的尝试将类别理论与设计程序联系起来之后,我得出以下结论: 类别理论在设计编程语言时很有用。 在设计程序时(甚至在使用基于类别原理设计的语言时)也不需要使用类别理论。例如:在Haskell中进行编程时,您将使用类型,类型构造函数,函数,高阶函数等来设计程序,而不是类别理论概念。 总而言之,我们有下层系统(顺序从低到高): 范畴论->编程语言->程序 在特定的层上,使用直接基础层的概念。 这种理解正确吗?如果不是这样,并且您认为在设计程序时我们可以直接使用类别理论的概念,请参阅一些论证该文章的文章或博客文章。 注意:通过设计程序,我的意思是基于不同的概念来设计程序,例如并发,并行,响应式,消息传递等。

5
函数编程之外的Lambda演算?
此问题是从理论计算机科学堆栈交换迁移而来的,因为可以在计算机科学堆栈交换上回答。 迁移 7年前。 我是一名大学生,我们目前正在研究Lambda微积分。但是,我仍然很难理解为什么这对我有用。我意识到,如果您进行大量的函数编程,它可能会很有用,但是我认为学习函数式编程并不需要它,您认为呢? 其次,Lambda微积分在计算机科学领域内但在函数式编程语言之外是否有用?

1
为什么函数式编程没有研究动态树?
动态树在解决诸如网络流,动态图,组合问题(Tarjan和Werneck的“实践中的动态树”)以及最近合并的字典(Adam Karczmarz的“ A Simple Mergeable Dictionary”)等问题中起着重要的作用, 对于动态树,我指的是1983年Sleator&Tarjan的论文“动态树的数据结构”中所述的定义。此后,在功能编程研究领域几乎没有发表任何努力。 Edward Kmett实施了ST树的一个版本,主要是作为C ++对应版本的翻译,请参阅Link-cut树。 克里斯·冈崎(Chris Okasaki)在他着名的《纯函数数据结构》一书中对Splay树做了有限的实现。 Ralf Hinze和Ross Paterson引入了称为2-3手指树的功能数据结构,但其目标与动态树的原始定义有所不同。 动态树的实现(可能是性能)根据三种方法进行划分: 线性化,其中ET树(Euler游览)发挥了重要作用。找不到纯粹的功能研究。 ST树是旗舰的路径分解,刚刚发现了Kmett的版本。 树收缩,其中顶级树,拓扑树和RC树是参与者。找不到纯粹的功能研究。 可以在Splay,AVL,红黑树上找到纯功能分析和实现,但不是动态树。前者被视为后者的影子(也称为虚拟或辅助)数据结构。 所以,我的问题是: 函数式编程研究社区不参与动态树数据结构的原因(缺点,弱点)是什么?

4
为什么在lambda演算中使函数匿名很重要?
我正在看Jim Weirich的演讲,标题为“ 函数式编程历险记 ”。在本讲座中,他介绍了Y组合器的概念,该概念实质上是为高阶函数找到固定点的。 正如他提到的那样,动机之一是能够使用Lambda微积分来表达递归函数,从而保持Church的理论(可以使用Lambda微积分来计算任何可有效计算的理论)。 问题在于函数不能简单地这样调用自身,因为lambda演算不允许使用命名函数,即 n (x ,y)= x + yn(x,y)=x+yn(x, y) = x + y 不能使用名称“ ”,必须匿名定义:ñnn (x ,y)→ x + y(x,y)→x+y(x, y) \rightarrow x + y 为什么lambda演算具有未命名的函数很重要?如果命名函数违反了什么原则?还是我只是误解了吉姆的视频?

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.