软件工程师手册/语言词典/J
J 不是 Java。它是 APL 的 ASCII 后代。以下是维基百科条目
截至本文撰写时,该软件是免费的,可在 J 软件页面 上获取
J 是一种面向数组的函数式语言。
入口点的概念在 J 中并不真正适用。程序本身就是入口点。
J 语句
J 语句以换行符结尾。例如
a=: b
J 注释以伪标记 NB. 开头,并持续到行尾。没有提供块注释,但文本文字可以用作此角色。例如
noun define This is some descriptive text, which may go on for a number of lines, and which needn't follow J's syntactic rules. )
注意,单独一行上的单个右括号会结束多行定义。
变量通过指定其定义来声明。文字数字数组可以通过在数字之间放置空格来引入。文字字符数组可以通过在单引号之间放置多个字符来引入
x=: 1 plus=: + x plus 2 3 5 7
3 4 6 8
'Hello world!'
Hello World!
J 中有两个定义词。
=:
实现具有全局范围的定义。
=.
实现具有局部范围的定义。
但是,请注意,在类和对象的上下文中,全局范围实际上意味着类范围或对象范围。J 中“类或对象”的一般术语是“locale”(注意与“local”的拼写略有不同)。大多数方法都是作为 J 动词实现的,其参数在隐式定义的数组 y 中可用。(句点是名称的一部分)。这可以通过使用命名这些变量的字符数组文字作为 = 的左参数来解包为一系列局部变量。
foo=: verb define 'arg1 arg2 arg3'=. 3{.y. 'the last line a method specifies the result' )
参见 变量声明
由于 J 是一种面向数组的语言,大多数 J 程序员使用数据选择来实现条件逻辑。虽然这不是大多数语言的传统功能,但 SQL 程序员经常使用类似的技术。
但是,J 也在定义动词的主体中提供了更传统的 if. 语句。
if. 1 = x then. y=: y + 3 end.
这些条件词本身不是语句语法的一部分,因此可以跨多行传播。
if. 2 = y then. z=: bar 99 a=: bagle * mayo else. b=: 1 2 3 4 end.
由于 J 是一种面向数组的语言,因此每个操作都能够遍历任意维数组。因此,循环可以在任何表达式中隐式发生。
x + y
将遍历所有适当的值,只要 x 和 y 的定义一致即可。
2 3 4 + 10 100 1000
12 103 1004
此机制可以通过指定操作的秩来配置,双引号字符用在此角色中(双引号字符在 J 中不会分隔字符串,并且通常双引号会单独使用,而不是成对使用)。
但是,在定义动词的主体中,更传统的控制词以类似于条件语句的方式可用
while. x < 100 do. x=: x+1 blah, blah, blah end.
在大多数情况下,您应该使用 J 的隐式循环。例外情况是并非所有数据都可以在一个时间点知道,例如在服务 IO 时。但是,即使在那里,使用 J 的事件处理而不是显式循环可能也是明智的。
对于许多目的,不需要显式输出语句。J 通常在计算器模式下使用,结果隐式显示。
但是,文件输出也是可能的,使用符号 1!:2(这可以认为是库 1,入口点 2)。通常,这将被分配一个助记符名称
fwrite=: 1!:2
J 使用自己的编号系统输出描述符,标准输出是描述符 2。(同样,文件读取是 1!:1,标准输入是描述符 1。)
在文件 io 的一般上下文中,必须显式指定换行符,但标准输出始终在结尾处包含隐式换行符。在 unix 下,写入 /dev/tty 以避免隐式换行符。
'Hello world!' fwrite <'/dev/tty' ('Hello world!',LF) fwrite <'/dev/tty'
注意,左尖号不代表重定向,而是代表将整个数组 '/dev/tty' 视为单个项目而不是字符序列。
所有 J 名词(数据)都是具有多个维度(至少 0 个)的数组。左尖括号用于封装这些数组中的一个。此操作称为装箱,它反映了这些结果的显示方式。
< i. 3 4 +---------+ |0 1 2 3| |4 5 6 7| |8 9 10 11| +---------+
一些基本的算法发布在 http://www.jsoftware.com/books/help/phrases/contents.htm
一般来说,算法是人们使用这种语言(或者任何语言)来实现的,因此这是一个开放性的话题。
垃圾收集是自动的。
J 程序通常使用 .ijs 扩展名。类定义通常使用 .ijc。动态链接库使用操作系统使用的任何扩展名。其他扩展名也是可能的。
- 从小处着手,尝试一些东西。不要学习太多
在尝试之前。不要尝试太多东西而没有花时间学习。确保你花足够的时间做其他事情。
- 在你开始编程时,随身携带操作列表。
- The J 软件页面
- The wikipedia 条目 包含操作列表。
在 J 软件出版物页面 提供了许多书籍。
这些书籍涵盖了从初学者到高级的各个方面。许多书籍可以免费下载。有些需要购买(例如,亚马逊网站上有链接到这些书籍的链接)。