标题：J语言
简介
程序设计语言是人们使用计算机的最基本工具,是其它所有工具的基础。正是基于程序设计语言的这种重要性,半个世纪以来,人们一直在为研制更好的程序设计语言而努力。至今,已面世的各种语言有几千种之多,但被人们认可的只是少数几种。
和所有事物的发展规律一样,程序设计语言也经历了由繁到简、由难到易的发展过程。按时间顺序,它的发展大体分为五代:第一代是机器语言,第二代是汇编语言,第三代是高级语言(属过程型语言,典型代表有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语言能自动分配和取消存储单元内容)等等。
通用性很强从简单使用到高级数据处理都能做。在办公室,可用于排序、制表、数据检索、建数据库;在国民经济部门,适合做统计计算;在科研部门,它适用于实验数据整理、合计、微分方程和积分方程等计算,也适用于决策处理等人工智能领域。
综述综上所述,J语言是一种高级通用型语言。它基于"计算机应当适应于人类,而不应是人类去适应计算机"的设计思想,把编程语言的文字变成可执行的数学符号。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
用BASIC编写的程序多达118行(清单省略)
而用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语言共有六种词类,它们是:名词(及代名词)、动词(代动词)、副词、连词、系词和括号。
这里通过上面例四说明一下J语言出现的语法现象:例中‘10 15.5 22.5 25’和‘2 0 2 1’是两组数,每个数就是一个名词;‘prices’和‘orders’是代名词,它们都以一个英文字母开头,后跟其它字母或数字。‘=.’是系词,它起赋值的作用。‘*’和‘+’是动词,动词作用于名词产生的结果仍是名词。‘/’是副词,它的作用是修饰动词,改变动词作用的方式。此例中‘+/’表示全加,即表示在数组每个元素之间插入动词‘+’。因此副词‘/’也称‘插入’副词。
下面仅对动词做一些重点解释。
(1)原始动词只用一个字符或一个字符后跟一个圆点或后跟一个冒号表示的动词,称为原始动词。接受动词作用的名词,称作参变量。动词左右各带有一个参变量,称作双目动词,例如,2 % 5(动词‘%’作用于左右两参变量,表示两数相除),结果是0.4。而只带有一个右参变量的动词,称作单目动词如: % 5(动词‘%’作用于右参变量,表示求右参变量倒数),结果为0.2。
通过赋值可定义新的动词(称代动词),它与定义代(名)词非常类似。例如:
mod=.|
6 mod y
4 0 2 4 0 2 4 0 2
(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
(3)数组及其运算J语言中的数据,简言之就是数组(array)数据,即使只有一个数,广义也称数组。数组呈现何种形状,用形状动词‘$’、秩(rank)等表示。
对于二维以上的数组,可用双目形状动词'$'来指定其大小。如:
data=. 4 -1 5 2
mat=. 2 2$data 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语言的所有原始函数句法和语义必将花费一定时间,但给您的回报是:您将能对异常错综复杂的数组和矩阵进行计算。这种计算用普通方法将是困难的或是不可能的。
Windows和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是一个表示各种算法的完美工具,因而最理想的是用于处理数据。当其它知名语言把注意力集中到提供图形用户界面(GUI)能力时,J语言则把处理数据和提供良好图形界面的"双优"集于一身贡献给您。您可以两种不同的方式使用J语言:对于那些需要标准窗口程序的用户来说,可以利用J语言作为一个完整的开发系统;另一种方式是可以使用Visual Basic或Delphi这样的工具来建立前台图形用户界面(GUI),而把J作为一个后台计算服务器使用,OLE自动化使此项工作变得易如反掌。在上述两种情况下,J语言数据处理能力远远超过其它语言