13. FPL(1)
Functional Programming Languages
- What do we study in this chapter?
- Introduction
- Mathematical Functions
- Fundamentals of Functional Programming Languages
- The First Functional Programming Language: Lisp Introduction to Scheme
- Common Lisp
- ML
- Haskell
- F#
- Support for Functional Programming in Primarily Imperative Languages
- Comparison of Functional and Imperative Languages
Introduction
imperative μΈμ΄μ μ€κ³
- von Neumann architecture κΈ°λ°
- λͺ λ Ήκ³Ό λ°μ΄ν°κ° λΆλ¦¬λμ§ μμΌλ©°, μμ°¨μ μΈ λͺ λ Ήμ΄ μ€ν
- κ°λ°μ μ μ₯μμλ ν¨μ¨μ±(ν¨κ³Όμ μΈ μννΈμ¨μ΄ κ°λ°λ³΄λ€λ μ€ν μ±λ₯) μ€μ
- νλ‘κ·Έλ¨ μν(state) λ³ν μΆμ μ΄ μ΄λ €μ
functional μΈμ΄μ μ€κ³
- μνμ ν¨μ κΈ°λ°
μ κ΄κ³λ‘ μν λ³κ²½ μμ΄ κ²°κ³Ό κ³μ° - μνμ μ΄λ‘ (μ: -calculus)μ κΈ°λ°ν λͺ νν μλ―Έ μ²΄κ³ μ 곡
- λͺ λ Ήνλ³΄λ€ μΆμνμ μ¬μ¬μ©, κ²μ¦ κ°λ₯μ± μΈ‘λ©΄μμ μ 리
- λͺ μμ μΌλ‘ μνλ₯Ό μΆμ νμ§ μμλ λ¨
- μνμ ν¨μ κΈ°λ°
μ£Όμ ν¨μν μΈμ΄λ€
- LISP: 1950λ
λ λ±μ₯ν μμ ν¨μν μΈμ΄
- μ΄ν λ°λ³΅λ¬Έ, λ³μ λμ λ± λͺ λ Ήν μμλ μΌλΆ λμ
- Common Lisp: λ€μν Lisp λ°©μΈμ ν΅ν©ν
- Scheme: κ°κ²°ν Lispμ μ μ λ μλΈμ
- ML, Haskell, OCaml, F#: μ μ νμ κΈ°λ° ν¨μν μΈμ΄
- LISP: 1950λ
λ λ±μ₯ν μμ ν¨μν μΈμ΄
Mathematical Functions
μνμ ν¨μμ μ μ
- μ μμ(domain)κ³Ό μΉμ(range) μ¬μ΄μ λͺ νν λ§€ν
- ννμ(expression) λλ ν μ΄λΈ(table)λ‘ μ μ κ°λ₯
- νκ° κ³Όμ μ μ¬κ·(recursion)μ 쑰건 ννμ(conditional expression)μ κΈ°λ°
- λ°λ³΅ λμ μ¬κ· μ¬μ©
- ν¨μλ side-effectκ° μμ (κ°μ μ λ ₯ β κ°μ μΆλ ₯)
- μ°Έμ‘° ν¬λͺ μ±(referential transparency) 보μ₯
- ν¨μλ μ΄μ μν(stage)λ₯Ό κΈ°μ΅νμ§ μμ
μμ: ν¨μ μ μμ νκ°
μ μ μμμ λ νκ° μμ μ λ‘ λ°μΈλ©λ¨
ν¨μ μ μ μμλ μμ λ³μ(free variable)κ° μμ΄μΌ ν¨λ¬΄λͺ ν¨μ(nameless function)μ λλ€ ννμ
- μ€μ²©λ λλ€ ννμ κ°μ λ§€κ°λ³μλ₯Ό μμ°¨μ μΌλ‘ λ°μ μ μμ
- 리μ€νΈμλ μ μ© κ°λ₯: μ)
Lambda Calculus
λλ€ κ³μ°λ²(-calculus)μ ν¨μν μΈμ΄μ κ³μ° λͺ¨λΈ
- νλ§ κΈ°κ³μ λλ±ν κ³μ° λ₯λ ₯μ κ°μ§
- μμ κΈ°λ° νμ μΈμ΄λ‘, λ³μ λ°μΈλ©κ³Ό ν¨μ μμ©μΌλ‘ λͺ¨λ κ³μ° μν κ°λ₯
ν¨μ μμ© μμ
μΈνμ λ λλ€ κ³μ°λ²: μ) Scheme
νμ λ λλ€ κ³μ°λ²: μ) ML, Haskell
Functional Forms
- κ³ μ°¨ν¨μ(higher-order function) λλ ν¨μν νν(functional form)
- ν¨μλ₯Ό μΈμλ‘ λ°μ μ μμ
- ν¨μλ₯Ό λ°νν μ μμ
- λλ λ λ€ κ°λ₯
- κ³ μ°¨ ν¨μλ ν¨μν νλ‘κ·Έλλ°μ ν΅μ¬ λꡬ
- μ½λ μ¬μ¬μ©μ±κ³Ό μ μ°μ± ν₯μ
Functional Composition
λ κ°μ ν¨μλ₯Ό μ λ ₯λ°μ 첫 λ²μ§Έ ν¨μλ₯Ό λ λ²μ§Έ ν¨μμ μ μ©νλ μλ‘μ΄ ν¨μλ₯Ό μμ±
μμ:
Apply-to-all
νλμ ν¨μμ 리μ€νΈλ₯Ό μ λ ₯λ°μ, 리μ€νΈμ κ° μμμ ν¨μλ₯Ό μ μ©ν κ²°κ³Ό 리μ€νΈλ₯Ό λ°ν
μΌλ°ν:
μμ:
Fundamentals of Functional Programming Languages
ν¨μν μΈμ΄μ μ€κ³ λͺ©ν: μνμ ν¨μ λͺ¨λ°©
λͺ λ Ήν μΈμ΄μμ λ³Έμ§μ μ°¨μ΄:
- λͺ λ Ήν: κ³μ° λ°©λ²(how)μ μ§μν¨ (μ: )
- ν¨μν: μ μΈμ λ°©μμΌλ‘ κ³μ° λμ(what)μ νν
ννμ κΈ°λ° κ΅¬μ±:
μν(state)λ λ³μμ μ§μ μ‘°μμ μ΅μν
μ¬κ·(recursion)λ₯Ό μ£Όμ λ°λ³΅ κ΅¬μ‘°λ‘ μ¬μ©
Referencing & Evaluation in FPL
- μ°Έμ‘° ν¬λͺ
μ±(referential transparency)
- λμΌ μ λ ₯ β λμΌ μΆλ ₯
- νκ° μμλ λΆμμ© μμ β ν μ€νΈ μ©μ΄
- λ³μλ λμ
λΆνμ
- μ: κ°μ νν λΆν
- κ³μ°μ κ²°κ³Όλ§μ μ€μ (ννμ μ€μ¬)
- μν λ³ν μμ΄ ν¨μ μ μ©λ§μΌλ‘ μ°μ° μν
- λΉκ΅μ μμ μμ μμ ν¨μλ‘λ κ°λ ₯ν κ΅¬μ± κ°λ₯
Original Lisp
- μ΅μ΄μ ν¨μν μΈμ΄
- 리μ€νΈ κΈ°λ° λ°μ΄ν° ꡬ쑰
- μ΅μ ν¨μν κ°λ κ³Ό λ€μ μ°¨μ΄ μμ
- fundamental concepts νν
- symbolic processing, μ¬κ·, μνμ κ³μ° λͺ¨λΈ
- μ€μ©μ λͺ©μ μμ λͺ
λ Ήν μμλ ν¬ν¨
- λμ , μν λ³κ²½, λ°λ³΅ λ±λ μ¬μ© κ°λ₯
Lisp Data Types and Structures
Lispμ κΈ°λ³Έ λ°μ΄ν° νμ : atomκ³Ό list
- atom: μ«μ, κΈ°νΈ λ± λ¨μΌ κ°
- list: μμκ° λ¦¬μ€νΈ λλ atomμΌ μ μμ
리μ€νΈ νν μμ:
- 리μ€νΈλ μ€μ²© κ°λ₯:
- sublist νν κ°λ₯
Lispλ typeless μΈμ΄
λͺ¨λ λ°μ΄ν°λ 리μ€νΈ λλ atomμΌλ‘ νν
Common Lispμ λ€μν νμ μ μ§μ (μ μ, μ€μ, λ¬Έμμ΄ λ±)
λ¨μΌ μ°κ²° 리μ€νΈ νμμΌλ‘ λ΄λΆ ꡬν: