J语言

维基百科,自由的百科全书
跳转至: 导航搜索

J,是图灵奖获得者肯尼斯·艾佛森許國華英语Roger Hui(Roger Hui)(出生于香港后去加拿大)於九十年代初發明的一种程序设计语言,是APL语言(亦是由艾佛森所創)、FPFL函數編程語言的繼承者。

為了避免APL使用特別的字集而遇到的問題,J只需基本的ASCII字集,多用點號和冒號來擴展現有基本字元的意義。

作為一個陣列編程語言,J非常簡潔和強大,在數學统计学程式設計上十分有效,特別是矩陣分析的能力。

如同原本的FP/FL程式語言,J透過它編程的特色,支援函數級別編程

J並非馮諾曼程式語言,卻能容許程式員使用馮諾曼編程風格。

例子[编辑]

J是極強大的語言,它的程式可以非常簡潔,但以人類的常用溝通語言而言通常會變得像密碼。以下是個快速排序單行小程式

  qsort =: ]`(($:@:((}.<:{.)#}.)),{.,($:@:((}.>{.)#}.)))@.(*@#)

但是如果我们定义一些中间记忆名称的话,(NB.为注释):

  id        =: ]                                 NB. 定义函数
  choose    =: @.                                NB. 条件执行
  first     =: {.                                NB. 集合首元素
  rest      =: }.                                NB. 除首元素之外的其他元素
  o         =: @:                                NB. 函数撰写:  f o g (x)  =   f(g(x))
  void      =: [:
  sign      =: * : void                          NB. monadic only, void dyadic
  length    =: # : void                          NB. monadic only, void dyadic
  selfrom   =: void : #                          NB. dyadic only, void monadic
  notEmpty  =: sign o length                     NB. sign 0 = 0

然後這個J版的快速排序變得更具可讀性:

  selLEF    =: (rest <: first) selfrom rest      NB. select Less-than or Equal to First
  selGTF    =: (rest >  first) selfrom rest      NB. select Greater-Than First
 
  qsort  =: id ` (($: o selLEF),first,($: o selGTF))  choose notEmpty

注意这是一个匿名递归函数. J语言提供了自身形参 操作 $: 来匿名引用大量的封装数据。甚少語言有能力去表達它。

字彙[编辑]

http://www.jsoftware.com/help/dictionary/vocabul.htm"

= 自我分類 · 等於 =. 令為(局部變數) =: 令為(全域變數)
< 封裝 · 少於 <. 下整數 · 取小(Min) <: 減數 · 少於或等於
> 開封 · 大於 >. 上整數 · 取大(Max) >: 增數 · 大於或等於
_ 負號/無限 _. 未定數 _: 無限
 
+ 共軛數 · 加 +. 實數/虛數 · GCD (Or) +: 倍數 · 非-或
* 正負號 · 乘 *. 長度/角度 · LCM (And) *: 平方 · 非-且
- 負 · 減 -. 非 · Less -: 減半 · Match
% 倒數 · 除以 %. 反矩陣 · 矩陣除以 %: 平方根 · 幾次開根號
 
^ ^. 自然對數 ^: Power (u^:n u^:v)
$ 形狀 · 塑型 $. 稀疏矩陣 $: 自我參照
~ Reflex · Passive / EVOKE ~. 異元素 · ~: 異元素篩· 非-同
| 絕對值 · 餘數 |. 逆轉 · 旋轉 (Shift) |: 轉置
 
. 行列式 · 點積 .. 偶數 .: 奇數
: Explicit / 單值-雙值 :. 對立向 :: 逆向
, 攤平 · 附加 ,. 攤開各項 · 縫合 ,: 單項化 · 疊加
; 夷平 · 封裝連結 ;. 分割 ;: 割字 · Sequential Machine
 
# 計數 · Copy #. 以 2 為基底 · 為基底 #: Antibase 2 · Antibase
! 階乘·Out Of !. Fit (Customize) !: 外務詞
/ 插入 · /. 斜向 · 關鍵 /: 升冪· 排序
\ 前插 · 內插 \. 後插 · 反差 \: 降冪· 排序
 
[ 同左 · 左   [:
] 同右 · 右    
{ 編目 · 由 {. 取首 · 取 {: 取尾 ·   {:: Map · 拿
} 單項修訂· 修訂 (m} u}) }. 去首 · 去掉 }: 去尾 ·
 
" (m"n u"n m"v u"v) ". Do · Numbers ": 預設格式· 格式
` 繫上(動名詞)   `: Evoke Gerund
@ 在上 @. 議程 @:
& / 組成 &. &.: 從屬(對偶) &: 添附
? 擲骰 · 發牌 ?. 擲骰 · 發牌(固定隨機種子)
 
a. ' a: 老么(封裝空字元) A. 變位指標· 迴文變位
b. 布林數/Basic C. 循環 · 排列 d. 導數/td>
D. 導數 D: Secant 斜率 e. 屬於夷平集· 屬於 (In)
E. · 區間之元素 f. Fix H. 超幾何
 
i. 整數 · 之指標 i: 整數 · 最後指標 I. 指標 ·
j. 虛數 · 複數 L. Level Of L: Level At
m. n. 名詞引數代號 NB. 注解 o. Pi Times · Circle 函數
p. 多項式 p.. 多項式求導 · 多項式積分 p: 素数
 
q: 質因數· Prime Exponents   r. 角 · 極座標 s: Symbol
S: Spread t. Taylor展式係數 t: 加權Taylor
T. Taylor近似 u. v. 動詞引數代號 u: Unicode
x. y. 引數代號 x: 高精確值 _9: to 9: 常數函數

外部鏈結[编辑]