J语言属于第五代的函数型语言,它是由
APL语言创始人,加拿大著名数学 家Ken E.Iverson于90年代初发明,并由Eric和Roger Hui完成。该语言是
APL的后继式语言, J语言和APL语言原理基本相同,但是它不使用APL的
象形文字,而使用
ASCII字符,功能也比AP L更完善、更简洁、更强大。它适用于各种微机和多种操作平台,包括
DOS、
Windows、
OS/2、
Unix和
Macintosh等。
语言简介
程序设计语言是人们使用计算机的最基本工具,是其它所有工具的基础。正是基于程序设计语言的这种重要性,半个世纪以来,人们一直在为研制更好的程序设计语言而努力。至今,已面世的各种语言有几千种之多,但被人们认可的只是少数几种。
和所有事物的发展规律一样,程序设计语言也经历了由繁到简、由难到易的发展过程。按时间顺序,它的发展大体分为五代:第一代是
机器语言,第二代是
汇编语言,第三代是高级语言(属过程型语言,典型代表有
BASIC、
FORTRAN、
PASCAL),第四代是面向
数据库语言(典型代表是SQL),第五代是多范式语言,它包括逻辑型(典型代表是
PROLOG)、函数型(典型代表有
LISP、APL)、对象型(典型代表有
Ada、
C++)等语言。
1994年ISI公司推出的J2.0 for Windows和1997年推出的J3.03 for Windows都提供了一个DDE服务程序,该服务程序可包括在您的VB(Visual Basic)程序中,当您编写用户界面和处理VB应用程序时,它允许您进行数学计算。J语言也提供基于Windows的开发系统,因此您可以使用自成体系的Windows界面,如:DDE、OLE、
ODBC(开放数据库连接),VBX(VisualBasic Custom Control)和其它一些软件,来编写独立的J应用程序。
J语言属于函数型编程语言,特别适合于数据处理。如果您在学校从事数学教学或在科学研究和技术开发部门从事科学计算或数据处理工作,您就有必要了解J语言。即使您工作在经济管理或金融部门,经常
分析数据库管理系统中的各项经济指标或金融数据,您也会发现J语言具有独特的魅力。
语言特点
J语言有以下显著的特点:
面向数组
它以非常规则的通用方式对数组进行处理。
数组元素本身又可以是数组,即,数学中的向量、矩阵和更高阶数组都作为单个数处理。
沿用了自然语言
数学中算子和函数(如:加、减、乘、除等),在J语言中被称作动词,算子或函数作用的对象(又称
操作数,如数字、
字符、数组等)被称作名词,修饰动词的被称作副词等。
具有丰富的动词(函数)
动词又分为原始动词和复合动词,原始动词共有70多个。J语言使用它特有的强大工具——副词和连词来修饰、组合原始动词,形成无数个复合动词。这些词都作为函数作用于数值或变量,产生预期的结果。
异常简洁
存储单元进行分配(J语言能自动分配和取消存储单元内容)等等。
通用性很强
从简单使用到高级数据处理都能做。在办公室,可用于排序、制表、数据检索、建数据库;在
国民经济部门,适合做统计计算;在科研部门,它适用于实验
数据整理、合计、微分方程和
积分方程等计算,也适用于决策处理等人工智能领域。
综述
J语言把重点放在函数编程和
数组的处理上,这对于一个想迅速开发复杂程序的用户来说,具有特殊的价值。
优点示例
读者或许要问:现在流行的编程语言很多,如
BASIC、
FORTRAN、PASICAL、C语言等,为什么还极力推崇J语言呢?热衷其它语言的读者,不一定马上改变固有的看法和习惯,但不妨试验一下J语言。您可能大吃一惊:原来辛辛苦苦用其它语言编写的程序,用J语言编写却是如此简单!百闻不如一见,请看下面几个例子。
例一
现分别用
BASIC和J语言编写求算术平均值的程序。现有从1到10十个自然数,用
BASIC语言求平均值的程序如下:
10 M=0
20 S=0
30 FOR I=1 TO 10
40 M=M+1
50 S=S+I
60 NEXT I
70 AVRG=S/M
80 PRINT AVRG
若用J语言编写,程序只有一行
AVRG=. (+/%#) 1+i.10
例二
2x-y=0
3x+y=2
而用J语言求解却如此简单:
0 2 %. A [A=. 2 2 $ 2 _1 3 1]
例三
@@26181000.GIF;公式1@@
用
BASIC编程多达62行(略),J语言却用一个符号(%)即可解决。若矩阵A为一
非奇异矩阵,则其逆矩阵A1成立,求解如下:
A=. 2 2 $ 1+i.4
A1=. %. A
例四
现售出四种商品,数量分别为2、0、2、1。单价分别为10、15.5、22.5、25(元),
求每种商品应收款和货款总额。用J语言计算如下:
prices=. 10 15.5 22.5 25
orders=. 2 0 2 1
sales=. orders*prices
20 0 45 25
sum=· +/sales
不难看出,商品应收款分别为20、0、45、25(元),贷款总额为90元。
语言应用
词类
J语言共有六种词类,它们是:名词(及代名词)、动词(代动词)、副词、连词、系词和括号。
这里通过上面例四说明一下J语言出现的语法现象:例中‘10 15.5 22.5 25’和‘2 0 2 1’是两组数,每个数就是一个名词;‘prices’和‘orders’是代名词,它们都以一个英文字母开头,后跟其它字母或数字。‘=.’是系词,它起赋值的作用。‘*’和‘+’是动词,动词作用于名词产生的结果仍是名词。‘/’是副词,它的作用是修饰动词,改变动词作用的方式。此例中‘+/’表示全加,即表示在
数组每个元素之间插入动词‘+’。因此副词‘/’也称‘插入’副词。
下面仅对动词做一些重点解释。
原始动词
只用一个字符或一个字符后跟一个圆点或后跟一个
冒号表示的动词,称为原始动词。接受动词作用的名词,称作参变量。动词左右各带有一个参变量,称作双目动词,例如,2 % 5(动词‘%’作用于左右两参变量,表示两数相除),结果是0.4。而只带有一个右参变量的动词,称作单目动词如: % 5(动词‘%’作用于右参变量,表示求右参变量倒数),结果为0.2。
通过赋值可定义新的动词(称代动词),它与定义代(名)词非常类似。例如:
mod=.|
6 mod y
4 0 2 4 0 2 4 0 2
复合动词
上面讨论的原始动词可以组合成任意复杂形式的
表达式。例如:
-^ % 2 NB.计算顺序必须‘从右向左’,相当于 -(^(%2))
-1.64872
J语言的
运算符(动词)没有其它编程语言那样的多种优先规则。J语言只有一条优先规则,那就是副词和连词优先于动词。不管是双目动词,还是单目动词,
运算顺序都是‘从右向左’。对于初学者,开始可能不习惯,但它确实比复杂的传统的运算规则简单得多。例如:
9 - 5 + 2 NB.计算按9-(5+2)
2
3 * 4 - 2
6
(3 * 4) - 2 NB.使用括号者优先
10
3 + % 4 NB.单目、双目动词组合
3.25
数组及其运算
J语言中的数据,简言之就是数组(
array)数据,即使只有一个数,广义也称数组。数组呈现何种形状,用形状动词‘$’、秩(rank)等表示。
对于二维以上的
数组,可用双目形状动词'$'来指定其大小。如:
data=. 4 -1 5 2
mat=. 2 2 NB.‘2 2’表示2行2列
mat
4 -1
5 2
·数组倒置和旋转
数组倒置可用单目动词‘|.’(倒置Reverse)进行,如:
t=. ‘abcdefg’
|.t
gfedcba
data=. 4 -1 5 2
|.data
2 5 -1 4
·矩阵转置
使用单目动词‘|:’
转置(Transpose)可颠倒参量轴的顺序,以达到转置的目的,如:
M=. i. 3 4
M
0 1 2 3
4 5 6 7
8 9 10 11
|:M
0 4 8
1 5 9
2 6 10
3 7 11
·内积和外积
代数学中有向量之间的内积(或
点积)运算,在线性代数中有矩阵与矩阵乘积运算。在代数中,向量的内积可求得如下:
设有两个向量
a=. 6 2 3 5 4
b=. 3 7 2 6 1
a和b的内积为
(6x3)+(2x7)+(3x2)+(5x6)+(4x1)
用J语言可用归并计算如下:
+ / a * b
72
也可用点积连词‘.’如此定义:x +/ . * y
设有两个矩阵A和B
A=. 3 4 $ 1+i.12
1 2 3 4
5 6 7 8
9 10 11 12
B=. 4 3 $ 2 + i.12
2 3 4
5 6 7
8 9 10
11 12 13
矩阵之积可用内积求得如下:
A + /. * B
80 90 100
184 210 236
288 330 372
外积表示两个向量所有元素乘积的运算,其结果生成一个表或矩阵。
现用插入副词‘/’定义一个双目动词‘*/’——外积。
P=. 1 2 3 4 5
* /~ P NB.可写成外积形式 P * / P
1 2 3 4 5
2 4 6 8 20
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
如果为P赋值1到9,则就是一张九九乘法表。
用途
学习J语言的所有原始函数句法和语义必将花费一定时间,但给您的回报是:您将能对异常错综复杂的
数组和矩阵进行计算。这种计算用普通方法将是困难的或是不可能的。
语言能力
J语言允许利用当前最新开发的视窗
交互界面,您可以使用称作窗口驱动器wd的动词,编写一个具有完全视窗图形界面的J应用程序。J语言的窗口
驱动器可以提供10种控制类型,其中有:按钮、编辑框、
列表框、
组合框、
滚动条、静态文本框、图形框、
图片框,以及OLE、VBX控制框。在图形框中,用J中所包含的图形命令画图;在OLE框中,表示被嵌入的OLE对象的图形;VBX类控制允许您把VBX控制添加到J的应用程序中。J能通过DDE动态连接和OLE的连接与嵌套来驱动其它窗口应用程序。J 3.0 for Windows版本支持OLE 2,它允许J直接与其它软件自动进行通讯。
最后,J语言也是处理关系数据库中以数组形式保存数据的强有力的工具。J语言中的动词ddsql可以让您直接用J码执行SQL语句。
总之,J是一个表示各种算法的完美工具,因而最理想的是用于处理数据。当其它知名语言把注意力集中到提供
图形用户界面