J引入fork的动机是什么?

时间:2014-01-23 14:26:38

标签: functional-programming theory j apl

对于从APL到J的演变,引入fork的动机是什么?我想用(+/ % #)来计算平均值是件好事,但这也使得阅读更长的动词列车变得更加困难。面对这种权衡,APL发明者是否有任何令人信服的理由在J?中选择这种风格?

2 个答案:

答案 0 :(得分:4)

感谢鲍勃的回答。为了使它更强大,现在我了解到fork的必要性如下所示。

  • 引入fork的动机是将默契编程实现为Combinatory logic的实现。你需要一些基础组合器(比如s-k basis on wiki),并且钩子/叉子形成一个完整的基础。为此目的,叉子或其等价物实际上是不可避免的。

  • 如果考虑f + gf * g,fork的概念很自然。在数学中,它们通常表示f(x) + g(x)f(x) * g(x)

  • Roger Hui's essay on verb trains中很好地解释了这个主题。

答案 1 :(得分:3)

我认为fork有动机将现有函数组合起来形成一个新函数。 J中的函数的组成由@:或@表示,以从函数f和g,f @:g创建新函数。这意味着获取g的结果并用f

处理它们

Fork也是如此,但允许我们使用第三个函数(中心齿)处理两个不同函数(右和左叉)的结果。因此(f h g)将f和g的结果应用于中心齿h。 fork构造很有趣,因为它是一种通过对函数进行分组而不需要额外符号来生成新函数的方法。正如你所指出的那样,它是可扩展的,因此(a b c d e)被读作(a b(c d e)),其中fork c d e的结果被用作右齿。