摆弄无点代码?

时间:2010-08-28 19:33:50

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

我一直在学习因子和J语言来试验无点编程。这些语言的基本机制似乎很清楚,但是如何理解如何进行算法设计是一项挑战。

对我来说,一个特殊的混淆源是如何构造代码以便很容易地尝试不同的参数。通过这个,我的意思是Mathematica和Matlab如此擅长的东西;你设置了一个算法然后操纵变量并观察发生了什么。

如果没有明确的变量,你怎么做?也许我在想这一切都错了。我应该如何在无点编程中实现这一点?

2 个答案:

答案 0 :(得分:9)

以下是我在处理连接范例时遇到的三个重要建议(在我的案例中应用于因子编程语言):

  • 无情地将您的代码视为。写极小的函数:如果有超过3-4个堆栈参数,也许你可以把它分成更小的部分。
  • 投入时间学习数据流组合器(bi,tri,cleave,spread,...)。它们允许表达公共数据流模式,同时消除了复杂堆栈混洗的需要。
  • 了解如何根据其他报价构建报价。使用currying技术(curry,with,...)从堆栈参数构建简单的引用,当事情变得太复杂时,使用Fried引用(“fry”词汇)。它们允许从模式中轻松构建复杂的嵌套引用,而无需任何堆栈重组。

作为一个总是,阅读和“走”到现有的代码。在Factor中,很容易探索运行时并了解事情是如何工作的。

对于您的特定混淆源,如果您的算法中有很多输入参数,最重要的是研究如何使用它们。收获数据流模式。你必须真正思考在最小的相关参数集上“安排”操作的最佳方法。

这是一次非常困难的经历,但是当它成功时,它也是非常有益的。之后我们觉得自己就像人类编译器。

祝你好运!

答案 1 :(得分:0)

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

在没有显式变量的情况下该怎么做?

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