【问题标题】:what are some of J's unique features?J的一些独特功能是什么?
【发布时间】:2011-03-14 04:14:45
【问题描述】:

我来自 C、Fortran、Python、R、Matlab 和一些 Lisp 的背景 - 我读过一些关于 Haskell 的东西。有哪些用 J 或 APL 家族的其他语言编写的巧妙想法/示例,这些想法/示例是独一无二的,并且没有在更常见的语言中实现?我总是有兴趣找出我缺少的东西......

【问题讨论】:

标签: tacit-programming j apl


【解决方案1】:

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

J 的另一个有趣的特性是隐性编程。您可以在不显式引用输入变量的情况下构建脚本,这样您就可以纯粹根据您打算做什么来表达一个想法。例如,我可以将平均函数定义为“将列表中的术语相加并除以列表中的条目数”,如下所示:

(+/ % #)

或者我可以编写一个脚本,将其分割成一个二维数组,并且只返回平均值大于 10 的行的平均值:

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

你可以用 J 做很多其他巧妙的事情;它是一种可执行形式的数学符号。想法很容易概括,因此您可以从学习该语言工作原理的任何一个方面中获益良多。

【讨论】:

    【解决方案2】:

    我认为 J 最有趣的方面之一是它是极少数甚至远程成为主流的非冯诺依曼语言之一。

    嗯。 J主流?嗯,是的,与 其他 非冯诺依曼语言相比,它是!只有极少数非冯诺依曼语言开始,其中大多数只存在于一些博士论文中并且从未真正实现过,而那些已实现通常具有即使这样,用户群也是 1。通常,如果至少有一个用户与发明它的人不在同一楼层,则它们被认为是成功的。

    相比那个,J主流。特别是,J 基于 John Backus 的 FP,来自他的开创性图灵奖讲座“编程可以从冯诺依曼风格中解放出来吗?”,它是 AFAIK 唯一有效的实现。 (例如,我认为 Backus 从未真正实现过 FP。)

    【讨论】:

    • J 中的默认风格(我认为这是使其成为非冯诺依曼语言的原因)与 Haskell 中的无点风格、Icon 和 Factor 等堆栈语言有什么区别,或者Unix shell 命令的管道?在许多其他语言中,命名变量被认为是不好的风格。
    • Jean Sammet 早在 70 年代中期就对大约 1000 多种编程语言进行了编目,但前提是除非发明者之外至少有 2 人使用它,否则它不是值得计数的编程语言。我认为这让 J 成为主流。
    【解决方案3】:

    这可能不像我想象的那么独特,但我能想到的 J 的首要功能是隐式类型。它在执行和内存管理之上创建了一个很好的抽象级别,以专注于正在处理的数据。

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

    var1 =: 10
    

    它已经完成了。数组?

    var2 =: 4 8 15 16 23 42
    

    完成。哦,但是等等,你需要把它除以 3.7 吗?不用为选角而烦恼,去做吧:

    var2 % 3.7
    

    摆脱这种强制、操纵和分配的必要性是一个小小的祝福。

    【讨论】:

    • 这个特性在许多提供基于向量的算术的语言(例如,Matlab、R、Python+Numpy)中不是很常见吗?
    • 我也这么认为。它不是完全独特的,但它是一个有趣的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2013-09-20
    相关资源
    最近更新 更多