複製鏈接
請複製以下鏈接發送給好友

J語言

鎖定
J語言屬於第五代的函數型語言,它是由APL語言創始人,加拿大著名數學 家Ken E.Iverson於90年代初發明,並由Eric和Roger Hui完成。該語言是APL的後繼式語言, J語言和APL語言原理基本相同,但是它不使用APL的象形文字,而使用ASCII字符,功能也比AP L更完善、更簡潔、更強大。它適用於各種微機和多種操作平台,包括DOS、Windows、OS/2 UnixMacintosh等。
中文名
J語言
名詞類型
編程語言
創始人
Ken E.Iverson
發明時間
90年代
優    點
比APL更完善、更簡潔、更強大

J語言語言簡介

程序設計語言是人們使用計算機的最基本工具,是其它所有工具的基礎。正是基於程序設計語言的這種重要性,半個世紀以來,人們一直在為研製更好的程序設計語言而努力。至今,已面世的各種語言有幾千種之多,但被人們認可的只是少數幾種。
和所有事物的發展規律一樣,程序設計語言也經歷了由繁到簡、由難到易的發展過程。按時間順序,它的發展大體分為五代:第一代是機器語言,第二代是彙編語言,第三代是高級語言(屬過程型語言,典型代表有BASICFORTRANPASCAL),第四代是面向數據庫語言(典型代表是SQL),第五代是多範式語言,它包括邏輯型(典型代表是PROLOG)、函數型(典型代表有LISP、APL)、對象型(典型代表有AdaC++)等語言。
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語言有以下顯著的特點:
面向數組
它以非常規則的通用方式對數組進行處理。數組元素本身又可以是數組,即,數學中的向量、矩陣和更高階數組都作為單個數處理。
沿用了自然語言
數學中算子和函數(如:加、減、乘、除等),在J語言中被稱作動詞,算子或函數作用的對象(又稱操作數,如數字、字符、數組等)被稱作名詞,修飾動詞的被稱作副詞等。
具有豐富的動詞(函數)
動詞又分為原始動詞和複合動詞,原始動詞共有70多個。J語言使用它特有的強大工具——副詞和連詞來修飾、組合原始動詞,形成無數個複合動詞。這些詞都作為函數作用於數值或變量,產生預期的結果。
異常簡潔
不同於其它高級語言,它側重於描述程序"做什麼",而不是"如何做",從而使J語言程序異常簡潔,同時避開了其它語言必須考慮的繁瑣細節,使用户把精力集中到要解決的問題上。如,它沒有數據類型和數組維數的規定,函數中沒有執行次序優先級的規定,不必對存儲單元進行分配(J語言能自動分配和取消存儲單元內容)等等。
通用性很強
從簡單使用到高級數據處理都能做。在辦公室,可用於排序、製表、數據檢索、建數據庫;在國民經濟部門,適合做統計計算;在科研部門,它適用於實驗數據整理、合計、微分方程和積分方程等計算,也適用於決策處理等人工智能領域。
綜述
綜上所述,J語言是一種高級通用型語言。它基於"計算機應當適應於人類,而不應是人類去適應計算機"的設計思想,把編程語言的文字變成可執行的數學符號。J語言又是"思維的工具",人們思考某個問題,並用J語言寫出解題步驟(即算法),該步驟本身就是計算機程序,真可謂"心想事成"。
J語言把重點放在函數編程和數組的處理上,這對於一個想迅速開發複雜程序的用户來説,具有特殊的價值。

J語言優點示例

讀者或許要問:現在流行的編程語言很多,如BASICFORTRAN、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’是代名詞,它們都以一個英文字母開頭,後跟其它字母或數字。‘=.’是系詞,它起賦值的作用。‘*’和‘+’是動詞,動詞作用於名詞產生的結果仍是名詞。‘/’是副詞,它的作用是修飾動詞,改變動詞作用的方式。此例中‘+/’表示全加,即表示在數組每個元素之間插入動詞‘+’。因此副詞‘/’也稱‘插入’副詞。
下面僅對動詞做一些重點解釋。
原始動詞
只用一個字符或一個字符後跟一個圓點或後跟一個冒號表示的動詞,稱為原始動詞。接受動詞作用的名詞,稱作參變量。動詞左右各帶有一個參變量,稱作雙目動詞,例如,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$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語言的所有原始函數句法和語義必將花費一定時間,但給您的回報是:您將能對異常錯綜複雜的數組和矩陣進行計算。這種計算用普通方法將是困難的或是不可能的。

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語言數據處理能力遠遠超過其它語言