我来自C,Fortran,Python,R,Matlab和一些Lisp的背景 - 我在Haskell上阅读了一些内容。 JL或APL家族其他语言中有哪些简洁的想法/例子是独特的,而不是用更常见的语言实现的?我总是有兴趣找出我所缺少的东西......
答案 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
摆脱铸造,操纵和分配的必要性是一种微不足道的祝福。