더 편한 메모 작성을 위해 miryang-dev.tistory로 이사했습니다.
SupabaseScalaGithubReact NativeprojectdiscoveryRemixRescriptPurescriptnpmCloudflareReactNext.jsGOHyper-VTiberoGitAlgorithms, 2020년

퓨어스크립트 북 챕터5 두 번째 읽어보는 메모장

July 6, 2022

퓨어스크립트 북 챕터5 - Pattern Matching

Simple Pattern Matching

패턴 매칭을 사용하여 두 정수의 최대 공약수를 계산

  • 유클리드호제법
gcd :: Int -> Int -> Int
gcd n 0 = n
gcd 0 m = m
gcd n m = if n > m
            then gcd (n - m) m
            else gcd n (m - n)

res로는 이런 느낌이려나

let rec gcd = (n: int, m:int): int => {
  if (n > m) {
    gcd(n - m, m)
  } else {
    gcd(n, m - n)
  }
}

Simple Patterns

_ 는 와일드 카드

fromString :: String -> Boolean
fromString "true" = true
fromString _      = false

toString :: Boolean -> String
toString true  = "true"
toString false = "false"
let fromString = (s: string):bool => {
    switch s {
        | "true" => true
        | _ => false
    }
}

let toString = (b: bool):string => {
    switch b {
        | true => "true"
        | false => "false"
    }
}

Record Patterns and Row Polymorphism

  • 다형성
    • 동일한 명령에 다르게 반응하는 현상
    • 동일한 함수를 다른 타입에 대응

Algebraic Data Types (ADT)