J语言
维基百科,自由的百科全书
J,是图灵奖获得者肯尼斯·艾佛森和許國華(Roger Hui)於九十年代初發明的一种程序设计语言,是APL语言(亦是由艾佛森所創)、FP、FL函數編程語言的繼承者。
為了避免APL使用特別的字集而遇到的問題,J只需基本的ASCII字集,多用點號和冒號來擴展現有基本字元的意義。
作為一個陣列編程語言,J非常簡潔和強大,在數學和统计学程式設計上十分有效,特別是矩陣分析的能力。
如同原本的FP/FL程式語言,J透過它編程的特色,支援Function-level programming。
J並非馮諾曼程式語言,卻能容許程式員使用馮諾曼編程風格。
[编辑] 例子
J是極強大的語言,它的程式可以非常簡潔,但通常會變得像密碼。以下是個快速排序的單行小程式︰
qsort =: ]`(($:@:((}.<:{.)#}.)),{.,($:@:((}.>{.)#}.)))@.(*@#)
(不,它不是Linear A script.) 但是如果我们定义一些中间记忆名称的话,(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: 常數函數 |
[编辑] 外部鏈結
- JSoftware,J的官方網站
- Cliff Reiter Chaos, fractals and mathematical symmetries... in J
- Ewart Shaw Bayesian inference, medical statistics, and numerical methods, using J
- Keith Smillie,陣列程式語言的統計學工具,尤其是J
- John Howland Research on parallelization of array programming languages, especially J
- 郭平欣教授之J語言初步
- 郭平欣教授之J字典
|
|
---|---|
工业编程语言 | A+ - ActionScript - Ada - 汇编语言 - B - Brainfuck - C - C++ - C++/CLI - COBOL - Curl - Delphi - Eiffel - Erlang - FORTRAN - IronPython - Java - JavaScript - JRuby - JScript - Jython - LISP - Lua - MATLAB - MATHEMATICA - Nuva - Oberon - Objective-C - OCaml - Pascal - Perl - PHP - PostScript - Powerbuilder - Python - R - REXX - Ruby - Self - Smalltalk - SQL - Tcl/Tk - C# - F# - J# - Microsoft Visual C# - Microsoft Visual C++ |
BASIC语言 | BASIC - BASICA - GW-BASIC - QBASIC - QuickBASIC - True BASIC - Turbo BASIC Visual Basic .NET - Visual Basic - VBScript - VBA |
GPU用著色器語言 | Cg - GLSL - HLSL |
学术编程语言 | APL/J - Haskell - Logo - ML - Prolog - Scheme - SAC |
其他编程语言 | ALGOL - Clipper - Forth - Modula-2/Modula-3 - MUMPS - PL/I - Simula |