初學 J

  • 瀏覽: 3,234
  • 回覆: 22
+2
之前介紹過 J,start up and installation 相關事宜和一般討論,請到: https://computer.discuss.com.hk/viewthread.php?tid=27742554。這帖主要講下語法。

可惜找不到 online REPL,要試真的只有 Install J 一途徑。

[ 本帖最後由 assembly.jc 於 2018-9-29 01:36 PM 編輯 ]



簡單就是美,第一樣想講的是 operator precedence,很奇怪吧,是,因為和其他 language 好唔同。
例如:

2 * 2 + 3
output: 10

其他的 language 是 (2 * 2) + 3 = 7,而 J 是 2 * (2 + 3) = 10,看明白了嗎?

不是說 + 的 precedence 比 * 高。而是 J 沒有 operator precedence,evaluation 由最右的 operation 開始。簡單吧。

[ 本帖最後由 assembly.jc 於 2023-10-22 03:49 編輯 ]



提示: 作者被禁止或刪除 內容自動屏蔽
引用:
原帖由 煙民母親生賤種 於 2018-9-30 01:56 AM 發表
咁仲學??  

這樣才好



[隱藏]
J 是 所謂的 array-oriented language,這點和 R 有點似。沒有 Looping,這個 concept 處理大量 data 時很正。
例如: 2個 array 相加和相乘:

1 2 3 + 1 2 3
output: 2 4 6

1 2 3 * 1 2 3
output: 1 4 9

由 1 加到 5:
+ / 1 2 3 4 5
output: 15



提示: 作者被禁止或刪除 內容自動屏蔽
引用:
原帖由 煙民母親生賤種 於 2018-10-1 03:05 AM 發表
咁先好?? 

係,方便,唔駛記咁多野



Insert verb: /
J 的除法用 % 這個符號,例如 10 除 2,
10 % 2
output: 5

原因是 / 保留用作 'Insert' (function),好似上一個帖最後的例子:
+ / 1 2 3 4 5

意思是把 + insert 在 1 2 3 4 5 之間,即
+ / 1 2 3 4 5 => 1+2+3+4+5 = 15

/ insert 的用途很廣,功能和 FP 的 fold 相似。例如,在 array 中找最大的數字。
>. / 5 63 9 1 => 5 >. 63  >. 9 >. 1
output: 63
其中,x >. y = max(x, y) return 兩者中最大的。

[ 本帖最後由 assembly.jc 於 2018-10-1 03:59 PM 編輯 ]



提示: 作者被禁止或刪除 內容自動屏蔽
[隱藏]
引用:
原帖由 煙民母親生賤種 於 2018-10-2 02:42 AM 發表
佢刻意將D符號咁轉化。其實大家心裏有數佢想點啦。係扮到好似係新野咁。點解一定要用 / 做其他用途? + - * / ,呢類所有程式都係咁用,我唔覺得佢有必要一定要將 % 代表 / 囉。 ...


之前帖子已經說了,J 前身是 APL,APL 已經有 50 年的歷史,比 C 仲舊,唔係新野泥。



引用:
原帖由 assembly.jc 於 2018-10-2 12:53 PM 發表


之前帖子已經說了,J 前身是 APL,APL 已經有 50 年的歷史,比 C 仲舊,唔係新野泥。


基本上只要是正常電腦語言,任何算法都可以用該語言寫得出。
所以正常論電腦語言優劣,都是運算速度, code size 、 memory size 及可讀性。
頭三樣其實大部份情況無所謂,有所謂的,基本上用 C 語言已經一定 ok 。
所以重點是可讀性。

但看來前面 J 語言的一個 quicksort 寫法真的太難讀了。

我看類似 functional programming language 的電腦語言都好難讀。
其實一般使用者寫出來,一年半載後再看,能否立刻看得明呢?
至少我自己認為自己不能,因為連寫都未必寫得出,哈!

我認為一個好的電腦語言,最好語法接近所謂的 pseudocode 寫法。
那麼,幾乎不用學,就立刻看得明用該語言寫的程式。



引用:
原帖由 xianrenb 於 2018-10-2 02:00 PM 發表


其實一般使用者寫出來,一年半載後再看,能否立刻看得明呢?


有所謂 acquired taste, 未飲過酒隊威士忌實嘔,飲慣左就離唔到口。
學過箇中窺門,幾年後都睇得明返。
但係話成 team 人都要識函數式玩法,通常係較尖端請貴人的project 先用,起貨會快。



引用:
原帖由 xianrenb 於 2018-10-2 02:00 PM 發表


基本上只要是正常電腦語言,任何算法都可以用該語言寫得出。
所以正常論電腦語言優劣,都是運算速度, code size 、 memory size 及可讀性。
頭三樣其實大部份情況無所謂,有所謂的,基本上用 C 語言已經一定 ok 。
所以重點是可讀性。

但看來前面 J 語言的一個 quicksort 寫法真的太難讀了。

我看類似 functional programmin ...


之前說過 FP 唔止難讀,而且唔係 Programmer Friendly。語言以外還有好多理論要學,例如之前說的 forall,Norman Ramsey 就打趣說無人可以只用英文解釋清楚它的意思 (https://stackoverflow.com/a/3071365/7940614),要唔要進入這個領域,好視乎個人的興趣。



也有可能是「習慣」使然。
幾十年前法國做了個研究,比較初學 programming 的學生學 Lisp 與 另一 algo-based 的語言。結果是學習速度和之後的應用上沒有大分別。推翻了 Lisp 難學難用的印象。



[隱藏]
引用:
原帖由 idontknowjack 於 2018-10-2 07:57 PM 發表
也有可能是「習慣」使然。
幾十年前法國做了個研究,比較初學 programming 的學生學 Lisp 與 另一 algo-based 的語言。結果是學習速度和之後的應用上沒有大分別。推翻了 Lisp 難學難用的印象。 ...


但最後都係 algo-based 之類的 imperative language 盛行。可見這類 scalar value 為運算單位的方式,更接近人類的直覺思維,即係更易學易用。但近年這種方式似乎也走到盡頭。



鍵盤翻頁
左右