摆弄无点代码?

use*_*424 7 functional-programming j pointfree tacit-programming factor-lang

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

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

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

Gab*_*ier 9

这里有三个重要的建议,我发现在处理连接范式时非常有用(在我的例子中应用于Factor编程语言):

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

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

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

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

祝好运!