iT邦幫忙

scala相關文章
共有 91 則文章
鐵人賽 Software Development DAY 30

技術 Applicative Functors (3)

Applicative Fuctor 定律 為求說明,以下回顧 Applicative Functor 的方法宣告會將所有參數完整呈現,故會與 Day 28...

鐵人賽 Software Development DAY 29

技術 Applicative Functors (2)

Monad 和 Applicative Functors 的差異 假設我們用 Option 來從 Map 資料中找東西,2 個查詢彼此獨立,通常可以輕鬆的用 m...

鐵人賽 Software Development DAY 28

技術 Applicative Functors (1)

今天要介紹一個功能沒有 Monad 這麼強,但比較泛用的抽象介面,Applicative Functors, 在 Day 26 - Monads (1) 中,我...

鐵人賽 Software Development DAY 27

技術 Monads (2)

Monads 定律 1 - 結合律 (Associative Law) 假設我們有個 Item 和 Order 類別, case class Item(name...

鐵人賽 Software Development DAY 26

技術 Monads (1)

Monads - flatMap 和 unit 的抽象介面 在介紹 Monad 之前,先聊聊一個之前有在 Option 和 Parser 下用到的 functi...

鐵人賽 Software Development DAY 25

技術 Functors

讓我們繼續從之前的程式中抽象出更高層的東西吧!今天要講的介面是 Functor。 Functors - map 的抽象介面 從 Day 3 開始,每個主題下的...

鐵人賽 Software Development DAY 24

技術 Monoids (3)

Monoid 的同態 (homomorphisms) 直接看例子吧! "foo".length + "bar".leng...

鐵人賽 Software Development DAY 23

技術 Monoids (2)

用 monoids folding List Monoid 跟 List 有著相當緊密的關係,Day 4 和 Day5 的 List 中我們有用到 2 個 fu...

鐵人賽 Software Development DAY 22

技術 Monoids (1)

從今天開始要進入 Part 3 啦!Part 3 主要是 functional programming 下更高層的抽象,也就是說把之前各種主題下常看到的模式概念...

鐵人賽 Software Development DAY 21

技術 能自由組合的解析器 Library (3)

如何處理有上下文關係的解析 想像一下若我們要解析開頭為數字,然後後面為 0 到 n 個字元 'a',以下的字串皆滿足此需求:0、1a、2aa、4aaaa, 但...

鐵人賽 Software Development DAY 20

技術 能自由組合的解析器 Library (2)

從重複辨識找到第一個正式定律 繼續 昨天 的定律推敲,首先來想一下如何辨識 0 到 n 次的字元 'a', def many[A](p: Parser[A]):...

鐵人賽 Software Development DAY 19

技術 能自由組合的解析器 Library (1)

解析器就是個能把 JSON 或 XML 等字串轉為 list、 map 等資料結構, 而這幾天就要用 functional programming 的概念來設計...

鐵人賽 Software Development DAY 18

技術 Purely Function 的平行化 (4)

API 的代數性質 在 API 實作過程中,我們都是先把 function 的型態定義好,然後在隨著型態去實現它,例如 map 就是用了 map2 和 unit...

鐵人賽 Software Development DAY 17

技術 Purely Function 的平行化 (3)

持續精煉我們的核心 API 讓我們開始實作其他核心 API 吧!以下為完整程式: import java.util.concurrent.* object P...

鐵人賽 Software Development DAY 16

技術 Purely Function 的平行化 (2)

統整一下 Par 容器型態的 function 經過 昨天 的推導,我們的平行化 library 中定義了 Par[A] 容器型態,然後核心 API 中包含了以...

鐵人賽 Software Development DAY 15

技術 Purely Function 的平行化 (1)

拜 摩爾定律 所賜,現在的計算資源越來越強,有越來越多的程式可以分散地、平行化 (parallelism) 的運行,平行運行下的程式勢必會遇到諸如 race c...

鐵人賽 Software Development DAY 14

技術 純粹的 functional 狀態 (3)

對最初的 rollDie function 有什麼影響 延續 昨天 最後設計的產生非負數且小於特定值的隨機數 nonNegativeLessThanViaFla...

鐵人賽 Software Development DAY 13

技術 純粹的 functional 狀態 (2)

更多的練習 Exercise D13-1 用 RNG.nextInt 來產生非負的隨機數,範圍介於 0 <= r <= Int.maxValue。...

鐵人賽 Software Development DAY 12

技術 純粹的 functional 狀態 (1)

這幾天會使用 隨機數字產生器 來介紹 functional programming 如何操作狀態變更,我們就能學會如何讓那些有狀態的程式純粹化,進而符合 Ref...

鐵人賽 Software Development DAY 11

技術 Strictness 和 Laziness (3)

LazyList 細部處理拆解 講進階用法之前,先來看一下 LazyList 是怎麼處理 LazyList(1, 2, 3, 4).map(_ + 10).fi...

鐵人賽 Software Development DAY 10

技術 Strictness 和 Laziness (2)

現在來看一下如何解決一下 昨天 所提到的問題:將所有轉換一次處理,避免建立暫時用的 List。 LazyList LazyList 就是 List lazine...

鐵人賽 Software Development DAY 9

技術 Strictness 和 Laziness (1)

想像一下你想要使用 List 來做一系列的資料操作, scala> List(1, 2, 3, 4).map(_ + 10).filter(_ % 2 =...

鐵人賽 Software Development DAY 8

技術 如何不拋出例外的處理錯誤 (3)

該怎麼讓舊的 function 兼容 Option (Either 也適用) 也許你用的 function 在很多地方都用到,改變原 function 的定義影...

鐵人賽 Software Development DAY 7

技術 如何不拋出例外的處理錯誤 (2)

Option 資料型態 enum Option[+A]: case Some(get: A) case None 昨天 那些瞎 g8 問題的解法就是讓...

鐵人賽 Software Development DAY 6

技術 如何不拋出例外的處理錯誤 (1)

我們在 Day 2 - 什麼是 Funcational Programming? 有提到拋出 exception 是某種 side effect ,倘若 exc...

鐵人賽 Software Development DAY 5

技術 Functional 資料結構 (3)

更多的練習 Exercise D5-1 前一天 的 foldRight 是從 List 的最右邊往左推進,想當然爾,當然也有從左邊開始的 foldLeft, 也...

鐵人賽 Software Development DAY 4

技術 Functional 資料結構 (2)

在 Functional 資料結構中的資料分享 當資料為不可變的情況下,可以的話我們會希望能夠重用所有資料,盡量減少複製情況發生,就稱做 資料分享 (data...

鐵人賽 Software Development DAY 3

技術 Functional 資料結構 (1)

Day 3 - Functional 資料結構 (1) functional 資料結構 (functional data structure) 就是只使用 pu...

鐵人賽 Software Development DAY 2

技術 什麼是 Functional Programming?

什麼是 Functional Programming? 簡言之就是沒有 side effect (副作用) 的 function,也就是一種純粹無暇的沒有副作用...

鐵人賽 Software Development DAY 1

技術 混天數用的前言

用 Scala 3 寫的 Functional Programming 會長什麼樣子? Functional Programming,三大設計範示之一,其開發思...