4

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

4

3 回答 3

6

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

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

(+/ % #)

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

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

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

于 2010-07-14T18:36:53.257 回答
5

我认为 J 最有趣的方面之一是它是为数不多的非冯诺依曼语言之一,它甚至是遥不可及的主流语言。

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

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

于 2010-07-10T11:31:30.267 回答
2

This is perhaps not as unique as I make it out to be, but the top feature I can think of for J is implicit typing. It creates that nice abstraction level above execution and memory management to focus on the data being processed.

Suppose you need to store a number:

var1 =: 10

And it's done. Array?

var2 =: 4 8 15 16 23 42

Done. Oh, but wait, you need to divide that by 3.7? Don't bother with casting, just go for it:

var2 % 3.7

Being rid of that necessity to cast and manipulate and allocate is a tiny blessing.

于 2010-07-31T20:29:20.620 回答