• Mindscape πŸ”₯
    • Playlist 🎧
    • Vim μ‚¬μš© 맀뉴얼
  • 🧠 Algorithm

    • Python μ‹œκ°„ 초과 λ°©μ§€λ₯Ό μœ„ν•œ 팁
    • 1966번: ν”„λ¦°ν„° 큐
    • 1018번: 체슀판 λ‹€μ‹œ μΉ ν•˜κΈ°
  • πŸ’° Finance

    • λΉ„νŠΈμ½”μΈ(Bitcoin)
  • πŸ›οΈ Humanities

    • Nordvik, Russia
    • North Sentinel Island
    • λ‘±κ³ λ‘±κ³ (Rongorongo)
  • πŸ‹οΈ Wellness

    • πŸ«’ μ—‘μŠ€νŠΈλΌ 버진 올리브유 (Extra Virgin Olive Oil)
    • μ°¨μ „μžν”Ό(Psyllium Husk)
  • πŸ–₯️ Computer Graphics

    • 8 - Lighting
    • 9 - Orientation & Rotation
    • 10 - Character Animation
    • 11 - Curves
    • 12 - More Lighting, Texture
  • πŸ—‚οΈ Operating System

    • 7. Deadlocks
    • 8. Memory Management(1)
    • 9. Memory Management(2)
    • 10. Virtual Memory(1)
    • 11. Virtual Memory(2)
    • 12. File System
    • 13. Mass Storage Management
    • 14. I/O Systems
  • πŸ”£ Programming Language Theory

    • 13. FPL(1)

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 μ–Έμ–΄μ˜ 섀계

    • μˆ˜ν•™μ  ν•¨μˆ˜ 기반
      (μž…λ ₯)β†’(ν•¨μˆ˜)β†’(좜λ ₯)(\text{μž…λ ₯}) \rightarrow (\text{ν•¨μˆ˜}) \rightarrow (\text{좜λ ₯})(μž…λ ₯)β†’(ν•¨μˆ˜)β†’(좜λ ₯)의 κ΄€κ³„λ‘œ μƒνƒœ λ³€κ²½ 없이 κ²°κ³Ό 계산
    • μˆ˜ν•™μ  이둠(예: Ξ»\lambdaΞ»-calculus)에 κΈ°λ°˜ν•œ λͺ…ν™•ν•œ 의미 체계 제곡
    • λͺ…λ Ήν˜•λ³΄λ‹€ 좔상화와 μž¬μ‚¬μš©, 검증 κ°€λŠ₯μ„± μΈ‘λ©΄μ—μ„œ 유리
    • λͺ…μ‹œμ μœΌλ‘œ μƒνƒœλ₯Ό μΆ”μ ν•˜μ§€ μ•Šμ•„λ„ 됨
  • μ£Όμš” ν•¨μˆ˜ν˜• μ–Έμ–΄λ“€

    • LISP: 1950λ…„λŒ€ λ“±μž₯ν•œ 순수 ν•¨μˆ˜ν˜• μ–Έμ–΄
      • 이후 반볡문, λ³€μˆ˜ λŒ€μž… λ“± λͺ…λ Ήν˜• μš”μ†Œλ„ 일뢀 λ„μž…
    • Common Lisp: λ‹€μ–‘ν•œ Lisp λ°©μ–Έμ˜ ν†΅ν•©ν˜•
    • Scheme: κ°„κ²°ν•œ Lisp의 μ •μ œλœ μ„œλΈŒμ…‹
    • ML, Haskell, OCaml, F#: 정적 νƒ€μž… 기반 ν•¨μˆ˜ν˜• μ–Έμ–΄

Mathematical Functions

  • μˆ˜ν•™μ  ν•¨μˆ˜μ˜ μ •μ˜

    • μ •μ˜μ—­(domain)κ³Ό μΉ˜μ—­(range) μ‚¬μ΄μ˜ λͺ…ν™•ν•œ λ§€ν•‘
    • ν‘œν˜„μ‹(expression) λ˜λŠ” ν…Œμ΄λΈ”(table)둜 μ •μ˜ κ°€λŠ₯
    • 평가 과정은 μž¬κ·€(recursion)와 쑰건 ν‘œν˜„μ‹(conditional expression)에 기반
    • 반볡 λŒ€μ‹  μž¬κ·€ μ‚¬μš©
    • ν•¨μˆ˜λŠ” side-effectκ°€ μ—†μŒ (같은 μž…λ ₯ β†’ 같은 좜λ ₯)
    • μ°Έμ‘° 투λͺ…μ„±(referential transparency) 보μž₯
    • ν•¨μˆ˜λŠ” 이전 μƒνƒœ(stage)λ₯Ό κΈ°μ–΅ν•˜μ§€ μ•ŠμŒ
  • μ˜ˆμ‹œ: ν•¨μˆ˜ μ •μ˜μ™€ 평가

    cube(x)=xΓ—xΓ—x\text{cube}(x) = x \times x \times x cube(x)=xΓ—xΓ—x

    cube(2)=2Γ—2Γ—2=8\text{cube}(2) = 2 \times 2 \times 2 = 8 cube(2)=2Γ—2Γ—2=8

    μœ„ μ •μ˜μ—μ„œ xxxλŠ” 평가 μ‹œμ μ— 222둜 바인딩됨
    ν•¨μˆ˜ μ •μ˜ μ•ˆμ—λŠ” 자유 λ³€μˆ˜(free variable)κ°€ μ—†μ–΄μ•Ό 함

  • 무λͺ… ν•¨μˆ˜(nameless function)와 λžŒλ‹€ ν‘œν˜„μ‹

    Ξ»x. xΓ—xΓ—x\lambda x.\, x \times x \times x Ξ»x.xΓ—xΓ—x

    (Ξ»x. xΓ—xΓ—x)(2)=8(\lambda x.\, x \times x \times x)(2) = 8 (Ξ»x.xΓ—xΓ—x)(2)=8

    Ξ»x.Ξ»y. x+y\lambda x.\lambda y.\, x + y Ξ»x.Ξ»y.x+y

    (Ξ»x.Ξ»y. x+y)(1)(2)=3(\lambda x.\lambda y.\, x + y)(1)(2) = 3 (Ξ»x.Ξ»y.x+y)(1)(2)=3

    • μ€‘μ²©λœ λžŒλ‹€ ν‘œν˜„μ€ nnn개의 λ§€κ°œλ³€μˆ˜λ₯Ό 순차적으둜 받을 수 있음
    • λ¦¬μŠ€νŠΈμ—λ„ 적용 κ°€λŠ₯: 예) map(Ξ»x. xΓ—2,Β numbers)map(\lambda x.\, x \times 2,\ \text{numbers})map(Ξ»x.xΓ—2,Β numbers)

Lambda Calculus

  • λžŒλ‹€ 계산법(Ξ»\lambdaΞ»-calculus)은 ν•¨μˆ˜ν˜• μ–Έμ–΄μ˜ 계산 λͺ¨λΈ

    • 튜링 기계와 λ™λ“±ν•œ 계산 λŠ₯λ ₯을 가짐
    • μˆ˜μ‹ 기반 ν˜•μ‹ μ–Έμ–΄λ‘œ, λ³€μˆ˜ 바인딩과 ν•¨μˆ˜ μ‘μš©μœΌλ‘œ λͺ¨λ“  계산 μˆ˜ν–‰ κ°€λŠ₯
  • ν•¨μˆ˜ μ‘μš© μ˜ˆμ‹œ

    (Ξ»x. xΓ—x)(3)=9(\lambda x.\, x \times x)(3) = 9 (Ξ»x.xΓ—x)(3)=9

  • μ–Ένƒ€μž…λ“œ λžŒλ‹€ 계산법: 예) Scheme

  • νƒ€μž…λ“œ λžŒλ‹€ 계산법: 예) ML, Haskell

Functional Forms

  • κ³ μ°¨ν•¨μˆ˜(higher-order function) λ˜λŠ” ν•¨μˆ˜ν˜• ν˜•νƒœ(functional form)
    • ν•¨μˆ˜λ₯Ό 인자둜 받을 수 있음
    • ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•  수 있음
    • λ˜λŠ” λ‘˜ λ‹€ κ°€λŠ₯
  • κ³ μ°¨ ν•¨μˆ˜λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 도ꡬ
  • μ½”λ“œ μž¬μ‚¬μš©μ„±κ³Ό μœ μ—°μ„± ν–₯상

Functional Composition

  • 두 개의 ν•¨μˆ˜λ₯Ό μž…λ ₯λ°›μ•„ 첫 번째 ν•¨μˆ˜λ₯Ό 두 번째 ν•¨μˆ˜μ— μ μš©ν•˜λŠ” μƒˆλ‘œμš΄ ν•¨μˆ˜λ₯Ό 생성

    h=f∘gβ‡’h(x)=f(g(x))h = f \circ g \Rightarrow h(x) = f(g(x)) h=f∘gβ‡’h(x)=f(g(x))

    μ˜ˆμ‹œ:

    f(x)=x2,g(x)=x+2β‡’h(x)=f(g(x))=(x+2)2f(x) = x^2,\quad g(x) = x + 2 \Rightarrow h(x) = f(g(x)) = (x+2)^2 f(x)=x2,g(x)=x+2β‡’h(x)=f(g(x))=(x+2)2

Apply-to-all

  • ν•˜λ‚˜μ˜ ν•¨μˆ˜μ™€ 리슀트λ₯Ό μž…λ ₯λ°›μ•„, 리슀트의 각 μ›μ†Œμ— ν•¨μˆ˜λ₯Ό μ μš©ν•œ κ²°κ³Ό 리슀트λ₯Ό λ°˜ν™˜

    μΌλ°˜ν˜•:

    map(f,(x1,x2,...,xn))=(f(x1),f(x2),...,f(xn))\text{map}(f, (x_1, x_2, ..., x_n)) = (f(x_1), f(x_2), ..., f(x_n)) map(f,(x1​,x2​,...,xn​))=(f(x1​),f(x2​),...,f(xn​))

    μ˜ˆμ‹œ:

    f(x)=x2,map(f,(2,3,4))=(4,9,16)f(x) = x^2,\quad \text{map}(f, (2, 3, 4)) = (4, 9, 16) f(x)=x2,map(f,(2,3,4))=(4,9,16)

Fundamentals of Functional Programming Languages

  • ν•¨μˆ˜ν˜• μ–Έμ–΄μ˜ 섀계 λͺ©ν‘œ: μˆ˜ν•™μ  ν•¨μˆ˜ λͺ¨λ°©

  • λͺ…λ Ήν˜• μ–Έμ–΄μ™€μ˜ 본질적 차이:

    • λͺ…λ Ήν˜•: 계산 방법(how)을 μ§€μ‹œν•¨ (예: x=x+1x = x + 1x=x+1)
    • ν•¨μˆ˜ν˜•: 선언적 λ°©μ‹μœΌλ‘œ 계산 λŒ€μƒ(what)을 ν‘œν˜„
  • ν‘œν˜„μ‹ 기반 ꡬ성:

    (x+y)+(aβˆ’b)(x+y)+(a-b) (x+y)+(aβˆ’b)

  • μƒνƒœ(state)λ‚˜ λ³€μˆ˜μ˜ 직접 μ‘°μž‘μ„ μ΅œμ†Œν™”

  • μž¬κ·€(recursion)λ₯Ό μ£Όμš” 반볡 ꡬ쑰둜 μ‚¬μš©

Referencing & Evaluation in FPL

  • μ°Έμ‘° 투λͺ…μ„±(referential transparency)
    • 동일 μž…λ ₯ β†’ 동일 좜λ ₯
    • 평가 μˆœμ„œλ‚˜ λΆ€μž‘μš© μ—†μŒ β†’ ν…ŒμŠ€νŠΈ 용이
  • λ³€μˆ˜λ‚˜ λŒ€μž… λΆˆν•„μš”
    • 예: x=x+1x = x + 1x=x+1 같은 ν‘œν˜„ λΆˆν—ˆ
  • κ³„μ‚°μ˜ κ²°κ³Όλ§Œμ„ μ€‘μ‹œ (ν‘œν˜„μ‹ 쀑심)
  • μƒνƒœ λ³€ν™” 없이 ν•¨μˆ˜ 적용만으둜 μ—°μ‚° μˆ˜ν–‰
  • 비ꡐ적 μž‘μ€ 수의 μ›μ‹œ ν•¨μˆ˜λ‘œλ„ κ°•λ ₯ν•œ ꡬ성 κ°€λŠ₯

Original Lisp

  • 졜초의 ν•¨μˆ˜ν˜• μ–Έμ–΄
    • 리슀트 기반 데이터 ꡬ쑰
    • μ΅œμ‹  ν•¨μˆ˜ν˜• κ°œλ…κ³Ό λ‹€μ†Œ 차이 있음
  • fundamental concepts ν‘œν˜„
    • symbolic processing, μž¬κ·€, μˆ˜ν•™μ  계산 λͺ¨λΈ
  • μ‹€μš©μ  λͺ©μ μ—μ„œ λͺ…λ Ήν˜• μš”μ†Œλ„ 포함
    • λŒ€μž…, μƒνƒœ λ³€κ²½, 반볡 등도 μ‚¬μš© κ°€λŠ₯

Lisp Data Types and Structures

  • Lisp의 κΈ°λ³Έ 데이터 νƒ€μž…: atomκ³Ό list

    • atom: 숫자, 기호 λ“± 단일 κ°’
    • list: μ›μ†Œκ°€ 리슀트 λ˜λŠ” atom일 수 있음
  • 리슀트 ν‘œν˜„ μ˜ˆμ‹œ:

    (AΒ BΒ CΒ DΒ EΒ FΒ G)(A\ B\ C\ D\ E\ F\ G) (AΒ BΒ CΒ DΒ EΒ FΒ G)

    • λ¦¬μŠ€νŠΈλŠ” 쀑첩 κ°€λŠ₯: ((AΒ B)Β (CΒ D))((A\ B)\ (C\ D))((AΒ B)Β (CΒ D))
    • sublist ν‘œν˜„ κ°€λŠ₯
  • LispλŠ” typeless μ–Έμ–΄

    • λͺ¨λ“  λ°μ΄ν„°λŠ” 리슀트 λ˜λŠ” atom으둜 ν‘œν˜„

    • Common Lisp은 λ‹€μ–‘ν•œ νƒ€μž…μ„ 지원 (μ •μˆ˜, μ‹€μˆ˜, λ¬Έμžμ—΄ λ“±)

    • 단일 μ—°κ²° 리슀트 ν˜•μ‹μœΌλ‘œ λ‚΄λΆ€ κ΅¬ν˜„:

      (AΒ BΒ C)β‡’[A]β†’[B]β†’[C]β†’NIL(A\ B\ C) \Rightarrow [A] \rightarrow [B] \rightarrow [C] \rightarrow \text{NIL} (AΒ BΒ C)β‡’[A]β†’[B]β†’[C]β†’NIL

졜근 μˆ˜μ •:: 25. 7. 29. μ˜€ν›„ 4:38
Contributors: kmbzn

BUILT WITH

CloudflareNode.jsGitHubGitVue.jsJavaScriptVSCodenpm

All trademarks and logos are property of their respective owners.
Β© 2025 kmbzn Β· MIT License