文章

Dyalog APL比賽-2019年-Phase 1-第2題

圖片
先看看題目要求: 這是相對容易的一條題目吧,以下用 NARS2000 解題。 題目要求寫一個函數Z,當Z被輸入引數 N(0至100)的時候,傳回相對應的字母評級,就好似小學生的考試評級一樣。 思路非常簡單:建立字母陣列V,V 由65個F(0分至64分)、5個D(65分至69分)、10個 C(依此類推)、10個B及11個A順序組成;然後用N做陣列V的指數,返回V[N+1]的值。用圖像表示: 提交的程式碼如下: 解說一下: 表達式 (65 5 10 10 11)/'FDCBA' 用 replicate 函數 " /"  建構陣列 V 於是陣列 V  由65個  F ,5個  D ,10個  C ,10個  B ,11個  A  組成 基於右引數 ⍵ ,提取V的第 ⍵+1 個元素(何以?因為 Z 0 要傳回 V 的第 1 個元素,而 Z 100 則需要傳回V的第 101 個元素,如此類推) 注意,這個寫法容許 ⍵ 係 陣列 ,也是題目的要求。例如: APL 的簡潔總是給人一種不能言喻的美感。 一項更正: 原文介紹 " / " 時把它稱作運算子,但在以上用法中,其作用應為函數。

用APL產生六合彩組合

圖片
姑且用生成六合彩投注號碼做第一個例子,感覺應該比較有趣和生活化。 説穿了就是要從1至49“隨機”挑選6個數字,實在簡單到不行。這裡使用 NARS2000 直譯器,安裝過程就省略了,打開後,輸入  6?49 到唯一一個看似Notepad的視窗中: 之後按 Enter,結果將會在下一行顯示: 實再言簡意賅到不得了。  6?49 的意思就是從1至49中抽取6個不同的元素。在此,  ? 係一個 函數 ,其左右兩邊各自有數字 引數   6 和  49 。由於 ? 使用左右引數,這稱之爲 ? 函數的 雙價 用法。所返回的是有6個元素的 陣列 。 既然有雙價就勢必有 單價 吧?不錯, 單價 使用下, ? 返回 1至49内的一個數字 純量 : 關於 純量 與 陣列 的區別與用法,往後會再探討。 另外,將左引數換成49的話,所得就是1至49的隨機排列 (permutation) 了: 試想想,以上功能如果用 Java / C / Python 編寫的話要如何處理?

APL相關資源

關於APL的資料,大多以英文爲主而鮮有中文的。簡單的Google搜尋一下“APL 語言 site:tw”或者“APL 語言 site:hk”便知道中文資料有多貧乏。 直譯器 https://tryapl.org/ 網上APL直譯器,免除安裝的麻煩,有virtual keyboard可以無痛輸入APL符號 https://www.dyalog.com/ 我初次使用的APL直譯器,需要安裝附帶的輸入法用以輸入APL符號 http://www.nars2000.org/ 我現在主要使用的APL interpreter,無需另外安裝輸入法 Youtube 短片 https://www.youtube.com/watch?v=_DTpQ4Kk2wA 1975年英國皇家學院示範使用"teletype"遙距使用APL。現代的人大概難以想像,當年使用電腦,係需要用一部打字機,通過電話綫連接遠端伺服器傳送指令,伺服器傳回結果再由打字機列印出來...... https://www.youtube.com/watch?v=DmT80OseAGs Dyalog APL的John Scholes示範用Dyalog APL解決數獨題目 https://www.youtube.com/watch?v=a9xAKttWgP4 同樣來自John Scholes,使用Dyalog APL編寫經典電腦"遊戲"Game of Life 學習資源(入門級) https://www.dyalog.com/uploads/documents/MasteringDyalogAPL.pdf Dyalog APL的電子書,亦係我最初使用的教材,適合絕對初學者 http://microapl.com/APL/LearningAPLwithAPLX.pdf MicroAPL的教材,以其產品APLX爲基礎。不過MicroAPL已被Dyalog APL拼購,APLX雖然可供下載,但不會再有更新 https://aplwiki.com/wiki/Main_Page 開放的APL維基,可惜仍然只有英語內容,非常值得閱讀。其中關於APL 慣用語 的一頁更加值得玩味 學習資源(進階) http://www.so...