Can you summarize the following document?
        
  作為一個陣列程式語言,J非常簡潔和強大,在數學和統計學程式設計上十分有效,特別是需要進行矩陣運算的時候。它還被用於極限程式設計和網路效能分析。  為了避免APL使用特殊的字元而遇到的問題,J只需基本的ASCII字符集,但使用點號codice_1和冒號codice_2作為“屈折”。在分析J的時候,點號codice_1和冒號codice_2只在前導著時是單獨的字;在其他情況下,點號和冒號是字形成字元,與緊前字元形成類似雙字元組的短字,多數這種“基礎”(或“原語”)的J字都充當數學符號,具有用點號或冒號從能獲得的基本字元擴充套件來的含義。還有,很多字元在其他語言中經常是成對的(比如codice_5),在J中被當作單獨的字,或者在有屈折的時候,作為多字元字的單字元字根。  如同圖靈獎獲得者約翰·巴科斯的FP和FL程式語言,J透過它隱式程式設計的特色,支援函式級程式設計。不同於支援物件導向程式設計的多數語言,J靈活的層次名字空間體制(這裡所有名字都存在於特定區域中),可以有效的用作基於類和基於例項的物件導向程式設計二者的框架。  自從2011年三月,J成為了自由和開源軟體,採用了GNU通用公共許可證版本3(GPLv3)。人們還可以在商業許可證下利用原始碼。

  J允許無點風格和。因此,它的程式可以非常精簡,一些程式設計者將它稱為難以閱讀的只寫語言。  J的“Hello, World!”程式:  這個hello world的實現反映了J的傳統用法,就是把程式錄入到J直譯器會話中,顯示出表示式結果。還可以準備J指令碼來作為獨立程式來執行。下面是在Linux系統的上的樣子:  J的算符沒有優先順序並且最右先行,codice_6的結果是codice_7。歷史上,APL使用codice_8來指示,所以codice_9等價於codice_10。在APL中,除法被表示為數學除號 (),它將減號和冒號一起(在EBCDIC和ASCII二者的紙質文字終端上)。因為ASCII一般不支援裝置無關方式的重複列印,並且本身不包括除號,J使用codice_11表示除法,作為一種可視的近似或暗示。(這展示了J記號的某些助憶符特徵,和使用ASCII帶來的一些困擾。)  定義一個J函式叫做codice_12,計算一列數的平均: 下面是這個函式的測試執行:  codice_13計數在陣列中專案的數目。codice_14合計這個陣列的專案。codice_11將這個合計除以這個總數。上述的codice_12使用一連串的三個動詞(codice_14、codice_11和 codice_13)來定義,術語叫“叉子”(fork)。特別是codice_20同於codice_21,這展示了J的一些能力。(這裡的V0、V1和V2指示動詞而Ny指示一個名詞。)  使用codice_12的一些例子:  動詞codice_23和codice_24在任何大小的陣列內查詢匹配者:  除了使用標準庫之外,還可以用包管理器安裝外掛,例如記憶體對映檔案外掛:

  J支援三種簡單型別:  其中數值有很多變種。J的數值型別之一是“位”。有兩個位值:codice_25和codice_26。還有,位可以形成列表。例如,codice_27是八個位的列表。在語法上,J分析器將位當作一個字。(空格字元被識別為字形成字元,位於在其他數值字的字元之間。)支援任意長度的列表。  進一步的,J支援在這些列表之上的所有常見二元運算,比如“與”、“或”、“亦或”、“旋轉”、“移位”、“非”等。例如:  J還支援位的高階陣列。它們可以被形成二維、三維等陣列。上面的運算同樣的執行在這些陣列之上。  其他數值型別包括整數(比如3, 42)、浮點數(3.14, 8.8e22)、複數(0j1, 2.5j3e88)、擴充套件精度整數(12345678901234567890x)和(擴充套件精度)有理分數(1r2, 3r4)。同位一樣,它們可以形成列表或任意維度的陣列。同位一樣,運算可以在一個陣列的所有數之上。下面表示式展示n位的pi,演示了J的擴充套件精度的能力:  位的列表可以使用codice_28動詞轉化成整數。整數可以使用codice_29動詞轉化為位的列表。  J還支援文字(字元)型別。文字包圍在引號之間,比如codice_30或codice_31。文字的列表使用將多個字元放入引號之內的常規約定來支援,比如codice_32。典型的,單獨的文字是8-位寬(ASCII),但是J還支援其他文字(Unicode)。不支援在文字上的數值和布林運算,但支援面向集合的運算(比如旋轉)。  最後,有一種盒裝資料型別。典型的,資料使用codice_33運算來放置入盒子中(沒有左側引數,如果有左側引數就是“小於”運算)。這類似於C的codice_34運算(沒有左側引數)。但是,C語言的codice_34的結果擁有引用語義,而J的codice_33結果擁有值的語義。換句話說,codice_33是一個函式併產生一個結果。這個結果是0維度的,不管包含怎樣的資料的結構。從J程式設計者的角度看,codice_33將資料放置到一個盒子中,並允許有效使用盒子的列表(它可以用其他盒子來組裝,和/或製作盒子的更多副本)。  J提供的唯一集合(collection)型別是任意維度的陣列。多數演算法可以使用這些陣列來簡潔的表達。  J的陣列是有同質的型別,例如列表codice_39是整數的列表,儘管codice_26可以是一個位。在極大程度上,這種的型別問題對於程式設計者是透明的。只有特定的特殊運算顯露出在型別上的不同。例如,列表codice_41,對大多數運算,將被當作是完全同於列表codice_42。  J還支援數值稀疏陣列,這裡用它們的下標儲存非零數值。這在非零數值相對很少的情況下是有效率的機制。  J還支援物件和類,但是它們是事物命名方式的人工製品,而非資料型別。實際上,使用盒裝文字來提及物件(和類)。J資料有值語義,但是物件和類需要引用語義。  另一個偽型別,關聯於名字而非數值,是記憶體對映檔案。

  一個程式或例程,有時接受資料作為輸入併產生資料作為輸出,被稱為“動詞”,與之相對,資料引數被稱為“名詞”。J有一組豐富的預定義的動詞,它們都自動的起作用於多種資料型別之上。使用者的程式可以命名,並可以用在任何允許使用原語的地方。  秩是J中的決定性概念。它在J中的重要性類似於SQL中的codice_43和C語言中的codice_44的重要性。  J的能力很大程度上來自它的“修飾詞”,這個範疇包括“副詞”和“連詞”:這些符號接受名詞和動詞作為操作者(operand),並以指定方式應用這些操作者。例如,修飾詞codice_8接受位於它左側的一個操作者,併產生應用這個動詞在它的引數的每個專案之間的一個動詞。就是說,codice_14是一個動詞,定義為應用codice_47在你的引數的專案之間。  在J中孤立的動詞序列叫做“列車”(train),J支援叫作“叉子”(fork)和“鉤子”(hook)的不可見連詞,它們規定了如何將引數或應用成員動詞於引數的結果提供給成員動詞來應用的規則。  J有大約兩打各種修飾詞。它們都可以應用到任何動詞,甚至是使用者寫的動詞,使用者可以寫自己的修飾詞。修飾詞都是各有各的能力的: 利用上各種修飾詞能產生實際程式設計所需要的運算操作的無限多種變體。  在上表中,codice_57,codice_58,codice_59,在上四種複合的實際運作機制及其異同詳見圖示。下面是四種複合及結果值擴充的示意例子:

  J的文件包括於NuVoc中,在J中的字被識別為名詞、動詞、修飾詞(副詞和連詞)、系詞、標點符號、控制字。主要的字列於“J原語”中,其中使用顏色標示出它們分別的詞類。早期的文件還有入門和字典。注意動詞有兩種形式:一元(引數只在右側)和二元(引數在左右兩側)。例如,在codice_60中橫槓是一元動詞,而在codice_61中橫槓是二元動詞。一元定義很大程度上獨立於二元定義,不管這個動詞是原語動詞還是派生動詞。

  下表最基本詞彙含義中如果用了間隔號( · )分隔,通常前面是一元含義(只有一個右側引數),後者是二元含義(左右兩側都有引數)。

  J提供了類似其他過程語言的控制結構,可用在顯式定義之中。每個範疇內的代表性控制字包括:

  

  實現升序快速排序,程式碼來自J字典:  下面是展示隱式程式設計的快速排序的實現。它涉及到將函式復合在一起而不顯式的引用任何變數。  在J中排序通常使用內建原語動詞codice_62升序或codice_63降序與codice_64選取來一起完成。上面的使用者定義的排序比如快速排序,典型的只用作演示。 用例:

  下面是演示使用自引用動詞codice_65來遞迴的計算斐波那契數列的例子:  fibonacci=:1:`($:@-&2+$:@<:)@.(>&2) 注意這裡的codice_66是常量動詞,這個遞迴還可以通過用名字引用動詞來完成,當然這隻在動詞有命名的時候是可行的:  fibonacci=:1:`(fibonacci@-&2+fibonacci@<:)@.(>&2)  用例:

  將J中的變數對映到檔案系統中的持久檔案:  load 'data/jmf' NB. 載入外掛 ] V =: 2 2 $ 1 2 3 4 NB. 測試用陣列數值 S =: 64000 NB. 檔案大小(位元組) F =: '~/persis.jmf' NB. 檔案路徑及名字 createjmf_jmf_ F;S NB. 建立並開啟持久檔案 map_jmf_ 'P'; F NB. 對映變數至持久檔案 P =: V NB. 將測試內容賦值到P unmap_jmf_ 'P' NB. 解除對映並關閉檔案 map_jmf_ 'Q' ; F NB. 再次建立對映 ] Q NB. 檢視持久檔案儲存內容 unmap_jmf_ 'Q' NB. 再次解除對映

  J擁有常規設施可以停止在動詞內錯誤或特定位置上。它還有一個唯一的可視偵錯程式,叫做Dissect,給出一個單一的J句子執行的2-D互動顯示。因為J的一個單一句子在低層語言中是作為一個完整的子例程進行計算的,這個可視顯示非常有用。
J程式語言,是肯尼斯·艾佛森和於1990年代初發明的一種陣列程式語言,是APL語言(亦是由圖靈獎獲得者艾佛森所創)的繼承者。