Functional programming 什么';这是J引入fork的动机
对于从APL到J的演变,引入fork的动机是什么?我想有Functional programming 什么';这是J引入fork的动机,functional-programming,theory,j,apl,Functional Programming,Theory,J,Apl,对于从APL到J的演变,引入fork的动机是什么?我想有(++/%#)来计算平均值是很好的,但这也使得阅读更长的动词序列变得更困难。面对这种权衡,APL发明家是否有任何令人信服的理由在J中选择这种风格?我认为fork有动机将现有功能组合起来形成一个新功能。J中函数的组合用@:或@表示,以从函数f和g创建一个新函数,f@:g。也就是说,取g的结果,用f进行处理 Fork的功能相同,但允许我们使用第三个函数(中心齿)处理两个不同函数(右齿和左齿)的结果。所以(fhg)将f和g的结果应用于中心齿h。f
(++/%#)
来计算平均值是很好的,但这也使得阅读更长的动词序列变得更困难。面对这种权衡,APL发明家是否有任何令人信服的理由在J中选择这种风格?我认为fork有动机将现有功能组合起来形成一个新功能。J中函数的组合用@:或@表示,以从函数f和g创建一个新函数,f@:g。也就是说,取g的结果,用f进行处理
Fork的功能相同,但允许我们使用第三个函数(中心齿)处理两个不同函数(右齿和左齿)的结果。所以(fhg)将f和g的结果应用于中心齿h。fork构造很有趣,因为它是一种通过分组函数而不需要额外符号来生成新函数的方法。正如您所指出的,它是可扩展的,因此(a b c d e)被理解为(a b(c d e)),其中fork c d e的结果被用作正确的齿。感谢Bob的回答。为了使它更坚固,现在我了解到叉子的必要性如下
- 引入fork的动机是实现默认编程,以实现。为此,您需要一些基本组合符(如),而hook/fork构成了一个完整的基础。出于这个目的,叉子或其等价物确实是不可避免的
- 如果想到
,f+g
,fork的概念是很自然的。在数学中,它们通常指f*g
和f(x)+g(x)
f(x)*g(x)
- 这一主题在中得到了很好的解释
(+/%#)
比更难阅读{(+/⍵)÷≢⍵}代码>.1.大括号{}
清楚地标识正在定义一个新函数;这在J的默契风格中一点也不清楚,这使得更大的表达式更难阅读(=用眼睛解析)2.组合现有函数的语法是相同的,无论您是在函数深度0(也称为常规编程)还是更高的位置工作(又称函数式编程):(+/A)÷≢A
vs.{(+/⍵)÷≢⍵}代码>等等。3.APL符号更清晰,更容易阅读。我认为你的第二个要点很重要。对我来说,J的火车更像是表达某种东西的高级方式,很像J中的sum=foldl(+)0
(或sum=:+//code>)相反,当我看到一个x+f(x)
或x*f(x)
形式的表达式时,我立即想到“嘿,这是一个钩子”,即使在J之外。