6

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

4

2 回答 2

4

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

  • 引入fork的动机是实现隐性编程作为组合逻辑的实现。为此,您需要某种基础组合器(例如wiki 上的 sk 基础),并且 hook/fork 形成了完整的基础。为此目的,fork 或它的等价物确实是不可避免的。

  • 如果想到 , 分叉的概念是很自然f + gf * g。在数学中,它们通常表示f(x) + g(x)f(x) * g(x)

  • Roger Hui 关于动词 trains 的文章很好地解释了这个话题。

于 2014-01-24T14:09:32.097 回答
3

我认为 fork 的动机是将现有功能组合成一个新功能。J 中的函数组合用@: 或@ 表示,从函数f 和g 中创建一个新函数,f@:g。这意味着获取 g 的结果并使用 f 处理它们

Fork 做同样的事情,但允许我们使用第三个函数(中央叉齿)处理两个不同函数(右叉齿和左叉齿)的结果。所以 (fhg) 将 f 和 g 的结果应用于中心齿 h。fork 结构很有趣,因为它是一种通过对函数进行分组而不需要附加符号来生成新函数的方法。正如您所指出的,它是可扩展的,因此 (abcde) 被读取为 (ab (cde)),其中 fork cde 的结果用作右齿。

于 2014-01-23T23:50:45.883 回答