J的独特功能有哪些?

时间:2010-07-10 05:30:44

标签: tacit-programming j apl

我来自C,Fortran,Python,R,Matlab和一些Lisp的背景 - 我在Haskell上阅读了一些内容。 JL或APL家族其他语言中有哪些简洁的想法/例子是独特的,而不是用更常见的语言实现的?我总是有兴趣找出我所缺少的东西......

3 个答案:

答案 0 :(得分:6)

J拥有大量的操作符,可以轻松编写复杂的程序,而无需寻找库。它具有非常强大的数组处理功能,以及使显式控制结构与大多数目的无关的迭代结构 - 以至于我更喜欢​​使用张量代数来声明显式循环,因为它更方便。 J在解释器中运行,但是一个好的J脚本可以和用编译器语言编写的程序一样快。 (当你取出显式循环时,解释器不必在每次执行时编译循环的内容。)

J的另一个有趣功能是默认编程。您可以在不明确引用输入变量的情况下构建脚本,这样您就可以纯粹根据要执行的操作来表达一个想法。例如,我可以将平均函数定义为“对列表中的项进行求和并将它们除以列表中的条目数”,如下所示:

(+/ % #)

或者我可以创建一个切入2D数组的脚本,只返回平均值大于10的行的平均值:

(10&<#])(+/%#)"1

你可以用J做很多其他整洁的东西;它是数学符号的可执行形式。思想很容易概括,因此您可以从学习语言的任何一个方面获得很多好处。

答案 1 :(得分:5)

我认为J最有趣的一个方面是,它是极少数甚至远程主流的非von-Neumann语言之一。

嗯。 J主流?嗯,是的,与其他非von-Neumann语言相比,它是!只有非常少的非von-Neumann语言开始,大多数只存在于一些博士论文中,并且从未实际实现过,那些 实现的语言通常都有即使如此,用户群为1。一般来说,如果至少有一个用户与发明它的人不在同一楼层,则认为它们是成功的。

相比,J 主流。特别是,J基于他的开创性图灵奖演讲中的约翰巴克斯的FP“可以从冯·诺依曼风格中解放出来吗?”,而AFAIK是它唯一的工作实现。 (例如,我不认为Backus实际上实现了FP。)

答案 2 :(得分:2)

这可能不像我说的那样独特,但我能想到的J的最重要特征是隐式输入。它在执行和内存管理之上创建了一个很好的抽象级别,专注于正在处理的数据。

假设您需要存储一个数字:

var1 =: 10

它已经完成了。阵列

var2 =: 4 8 15 16 23 42

完成。哦,等等,你需要将它除以3.7吗?不要为铸造而烦恼,只需去寻找它:

var2 % 3.7

摆脱铸造,操纵和分配的必要性是一种微不足道的祝福。