【问题标题】:In-place algorithms in functional languages函数式语言中的就地算法
【发布时间】:2014-10-15 12:00:43
【问题描述】:

我尝试研究更严格的编程主题,因为我意识到那里有许多我一无所知的范例。我关注了 SICP 和 Foundations of Computer Science 等书籍。我现在正在以一种正式的、面向证明的方式学习算法。当我学习 Quicksort 时,我意识到我不知道如何用函数式语言来实现它。这是一种就地排序算法,但我如何才能在没有变异的情况下实现这一点。

也许有一个简单的答案,我还不知道很多实际和理论概念。但我读到函数式语言是基于 lambda 演算的,它的功能相当于图灵机。我在 Haskell 中找到了一个实现,但我不了解 monad,希望我最终能学会。

那么你能用尽可能简单的术语解释一下这是怎么可能的吗? lambda演算本身有变异的概念吗?不要太苛刻,因为我不太了解 lambda 演算,只是在 Scheme 中编程。一个是或否的答案加上一点解释就足够了。

【问题讨论】:

    标签: lambda functional-programming in-place


    【解决方案1】:

    lambda演算本身有变异的概念吗?

    不,没有突变的概念。您只需拥有函数应用程序 (apply) 和函数抽象 (lambda)。

    【讨论】:

    • 那么如何以纯函数的方式实现就地算法呢?正如我现在所想的那样,我只能看到我必须改变输入数据,这样我就不会产生它的副本。但这是如何实现的呢?如果没有突变,我看不出我怎么能做到这一点。如果没有变异就无法做到,那么 lambda 演算和图灵机如何是等效模型?就地可能不是算法的特征,而是实现细节?提前致谢。
    • @meguli 是的,当涉及到 TM-LC 等效性时,就地是一个实现细节,算法也是如此。在数学意义上,等价是关于函数的可计算性。 (也就是说,所有的排序算法都是等价的,实现的功能都是一样的。)
    猜你喜欢
    • 2010-10-05
    • 2018-06-10
    • 2012-06-15
    • 1970-01-01
    • 2010-09-07
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多