【问题标题】:Fiddling with point-free code?摆弄无点代码?
【发布时间】:2011-04-05 06:18:47
【问题描述】:

我一直在学习 Factor 和 J 语言来尝试无点编程。语言的基本机制似乎很清楚,但要了解如何进行算法设计是一个挑战。

对我来说,一个特别令人困惑的原因是应该如何构建代码,以便轻松尝试不同的参数。我的意思是 Mathematica 和 Matlab 非常擅长的那种东西。您设置了一个算法,然后操纵变量并观察会发生什么。

在没有显式变量的情况下如何做到这一点?也许我在想这一切都是错的。在无点编程中我应该如何处理这个问题?

【问题讨论】:

    标签: functional-programming j pointfree tacit-programming factor-lang


    【解决方案1】:

    以下是我发现在处理串联范式时非常有用的三个重要建议(在我的案例中适用于 Factor 编程语言):

    • 无情地考虑您的代码。编写极小的函数:如果堆栈参数超过 3-4 个,也许你可以把它分成更小的部分。
    • 花时间学习数据流组合器(bi、tri、cleave、spread...)。它们允许表达常见的数据流模式,同时无需复杂的堆栈改组。
    • 学习从其他引文中构建引文。使用 currying 技术(curry, with, ...)从堆栈参数构建简单的引用,当事情变得过于复杂时使用 Fried 引用(“fry”词汇)。它们允许从模式轻松构建复杂的嵌套引用,而无需任何堆栈改组。

    和往常一样,阅读并“走进”现有代码。在 Factor 中,很容易探索运行时并查看事情是如何工作的。

    对于你具体的困惑来源,如果你的算法中有很多输入参数,最重要的是研究它们将如何使用。收集数据流模式。您必须真正考虑在最小的相关参数集上“调度”操作的最佳方式。

    这是一次相当艰难的经历,但当它成功时,它也真的很值得。在那之后我们感觉自己像一个人类编译器..

    祝你好运!

    【讨论】:

      【解决方案2】:

      我对串联编程语言 Joy 和 Backus FP-like 语言有一点经验。关于算法设计,我可以说是非常结构化的算法设计。

      在没有显式变量的情况下如何做到这一点?

      事实上,像 Backus FP 这样的语言没有全局变量。但是,没有什么可以阻止使用一些受限制的局部变量,例如实例变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-10
        • 2014-09-03
        • 2018-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多