tacit-programming - J 有哪些独特之处?

标签 tacit-programming j apl

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

最佳答案

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

J 的另一个有趣功能是默认编程。您可以在不显式引用输入变量的情况下构建脚本,这让您可以纯粹根据您打算做什么来表达想法。例如,我可以将平均函数定义为“将列表中的项相加并将它们除以列表中的条目数”,如下所示:
(+/ % #)
或者我可以制作一个脚本,将其切成二维数组并只返回平均值大于 10 的行的平均值:
(10&<#])(+/%#)"1
你可以用 J 做很多其他的事情;它是一种可执行的数学符号形式。想法很容易概括,因此您可以从学习语言工作方式的任何一个方面中获得很多好处。

关于tacit-programming - J 有哪些独特之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3217976/

相关文章:

indexing - 如何从 APL 隐式函数中的矩阵中提取多个元素?

arrays - GNU APL 和 Dyalog APL 中的分区行为

keyboard - Dyalog APL 劫持 Windows Key 并且不归还它(Fedora 32/Gnome,Free Licence,Kitty)

j - 如何过滤J中的列表?

dice - K个N面骰子的不同掷数

prolog - 类似Prolog的统一可以用无点的方式表达吗?

multithreading - 多核 J -- 并行化

arrays - J 动词的数组参数 "compatible shape"是什么构成的?

haskell - J 风格的副词、 fork 等是否通过主流函数式语言的库进行了模拟?