J語言
歷史
程式設計語言是人們使用計算機的最基本工具,是其它所有工具的基礎。正是基於程式設計語言的這種重要性,半個世紀以來,人們一直在為研製更好的程式設計語言而努力。至今,已面世的各種語言有幾千種之多,但被人們認可的只是少數幾種。和所有事物的發展規律一樣,程式設計語言也經歷了由繁到簡、由難到易的發展過程。按時間順序,它的發展大體分為五代:第一代是機器語言,第二代是彙編語言,第三代是高級語言(屬過程型語言,典型代表有BASIC、FORTRAN、PASCAL),第四代是面向資料庫語言(典型代表是SQL),第五代是多範式語言,它包括邏輯型(典型代表是PROLOG)、函式型(典型代表有LISP、APL)、對象型(典型代表有Ada、C++)等語言。
J語言屬於第五代的函式型語言,它是由APL語言創始人,加拿大著名數學家Ken E.Iverson於90年代初發明,並由Eric和Roger Hui完成。該語言是APL的後繼式語言,J語言和APL語言原理基本相同,但是它不使用APL的象形文字,而使用ASCII字元,功能也比APL更完善、更簡潔、更強大。它適用於各種微機和多種操作平台,包括DOS、Windows、OS/2、Unix和Macintosh等。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語言有以下顯著的特點:(1)面向數組,它以非常規則的通用方式對數組進行處理。數組元素本身又可以是數組,
即,數學中的向量、矩陣和更高階數組都作為單個數處理。
(2)沿用了自然語言中的語法術語,數學中運算元和函式(如:加、減、乘、除等),在J語言
中被稱作動詞,運算元或函式作用的對象(又稱運算元,如數字、字元、數組等)被稱作名詞,修
飾動詞的被稱作副詞等。
(3)具有豐富的動詞(函式)。動詞又分為原始動詞和複合動詞,原始動詞共有70多個。J
語言使用它特有的強大工具——副詞和連詞來修飾、組合原始動詞,形成無數個複合動詞。
這些詞都作為函式作用於數值或變數,產生預期的結果。
(4)不同於其它高級語言,它側重於描述程式"做什麼",而不是"如何做",從而使J語言程
序異常簡潔,同時避開了其它語言必須考慮的繁瑣細節,使用戶把精力集中到要解決的問題上
。如,它沒有數據類型和數組維數的規定,函式中沒有執行次序優先權的規定,不必對存儲單
元進行分配(J語言能自動分配和取消存儲單元內容)等等。
(5)通用性很強,從簡單使用到高級數據處理都能做。在辦公室,可用於排序、制表、數
據檢索、建資料庫;在國民經濟部門,適合做統計計算;在科研部門,它適用於實驗數據整理、
合計、微分方程和積分方程等計算,也適用於決策處理等人工智慧領域。
綜上所述,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’和‘o
rders’是代名詞,它們都以一個英文字母開頭,後跟其它字母或數字。
‘=.’是系詞,它起賦值的作用。
‘*’和‘+’是動詞,動詞作用於名詞產生的結果仍是名詞。
‘/’是副詞,它的作用是修飾動詞,改變動詞作用的方式。此例中‘+/’表示全加,即表
示在數組每個元素之間插入動詞‘+’。因此副詞‘/’也稱‘插入’副詞。
下面僅對動詞做一些重點解釋。
(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語言數據處理能力遠遠超過其它語言