實作基本的陣列操作。
在函式式語言中,length、map和reduce這類陣列操作非常常見。請在不使用現有函式的情況下,實作一系列基本的陣列操作。
要實作的操作,其確切數量和名稱會依 track 而有所不同,以避免與現有名稱衝突,但你會實作的一般操作包括:
append(給定兩個陣列,把第二個陣列中的所有項目加到第一個陣列的尾端);concatenate(給定一連串的陣列,把所有陣列中的所有項目合併成一個攤平的陣列);filter(給定一個述詞和一個陣列,回傳所有 predicate(item) 為 True 的項目所組成的陣列);length(給定一個陣列,回傳其中項目的總數);map(給定一個函式和一個陣列,回傳對所有項目套用 function(item) 所得結果的陣列);foldl(給定一個函式、一個陣列和初始累加器,從左側將每個項目摺疊(縮減)進累加器);foldr(給定一個函式、一個陣列和一個初始累加器,從右側將每個項目摺疊(縮減)進累加器);reverse(給定一個陣列,回傳一個包含所有原始項目、但順序相反的陣列)。請注意,傳遞給摺疊函式(foldl、foldr)的引數順序很重要。
上面這個練習的說明是所有 Exercism 軌道共用的。
為了與 Elixir 的標準函式庫保持一致,foldl和foldr所使用的函式應該把元素當作第一個引數,把累加器當作第二個引數。
此外,為了不與自動匯入的函式 Kernel.length/1 衝突,計算長度的函式會改名為count。
這個練習有一或幾個測試被標記為:slow,因為它們可能需要很久才能完成。因此,平台上的自動測試執行器不會執行它們。如果你直接在平台上的網頁編輯器解這個練習,不妨考慮把這個練習下載到自己的電腦上。這樣你就能執行所有測試,並檢查你的解法效率喔。