Syntactic Sugar구문 설탕은 언어의 표현력을 증가시키진 않지만 프로그램을 더 읽고 쓰기 편하게 만들어준다. 예를 들어, let x = E1 in E2도 사실 설탕에 속하는데, 여기서 설탕을 빼면 (proc x E2) E1이 된다.let x = 1 in let y = 2 in x + y위와 같은 구문이, => (proc (x) (let y = 2 in x + y)) 1=> (proc (x) ((proc (y) (x + y)) 2)) 1설탕이 빠지면 이렇게 난잡해진다. 즉 우리가 사용한 기존 문법에서,let x = E1 in E2 ⇒ (proc (x) E2) E1 로 설탕을 쳐낼 수 있고letrec f(x) = E1 in E2 ⇒ let f = proc (x) (E1) in E2 으로 설탕..
학교강의필기장
Let-Polymorphic Type Checking Algorithmlet 다형성을 지원하는 타입 체크 알고리즘은 재계산을 피하고 효율적으로 타입 체크를 수행하기 위해 더 정교한 알고리즘을 사용한다. 1. Γ라는 타입 환경에서 표현식 e1을 찾기 위해 일반적인 타입 체크 알고리즘을 사용한다. (U(V(Γ, e1, t)))2. 타입 일반화: 타입 t에서 남아있는 변수를 일반화해서 type scheme, ∀α1 ... α_n.t 을 구한다. 이들은 t에서 나타나는 타입 변수들이다.3. 바인드된 변수 x에 대해 타입 스킴을 기록하도록 타입 환경을 확장하고, e2에 대해 타입 체크를 시작한다.4. x의 각 발생마다 새로운 타입 변수 β1 ... β_n을 생성하고 이를 사용하여 타입 스킴을 인스턴스화 한다. 위..
자동 타입 추론 문제자동 타입 추론은 주어진 프로그램 E에 대해 가장 일반적인 타입을 추론하는 문제이다. E가 타입을 가질 수 있는 경우 이를 결정하는 타입을 찾아내고, 그렇지 않은 경우에는 타입을 가질 수 없음을 표시한다. 자동 타입 추론은 정적 분석(static analysis) 알고리즘으로, 표현식의 사용 방식을 관찰하여 타입을 추론한다. 이 알고리즘은 정확(sound)하고 완전(complete)하다. 즉, 분석이 표현식에 대해 타입을 찾는다면 그 표현식은 잘 타입된 것이고, 표현식이 타입 시스템에 따라 타입을 가지면 분석은 그 타입을 반드시 찾아낸다. 이 알고리즘은 아래 두 단계로 구성된다. 1. 프로그램 텍스트에서 타입 방정식 생성2. 방정식 풀이 타입 방정식은 각 서브 표현식과 변수에 대해 타..
Motivation현재까지, 문법과 의미를 엄밀하게 정의하고 정식 설계를 반영한 인터프리터를 구현함으로써 Program → Interpreter → Result 구조의 언어를 설계하였다.그러나 현재 시스템에는 안전하지 않은 프로그램을 실행하려 시도하여 런타임 에러가 발생할 수 있다. (C++, Python, JS 등의 언어가 그렇다) 따라서 프로그램의 안전성을 분석하고 모든 버그를 정적으로 탐지하는 자동화된 기술을 만들어야 한다.Program → Analyzer → Interpreter → Result Static Analyzer는 정적, 그리고 자동으로 소프트웨어 버그를 감지한다.static: 실행 전에 프로그램 텍스트를 분석한다.automatic: Static Analyzer로 sw를 분석한다. 이는..
레코드Records란 이름이 있는 메모리의 모음이다. 즉, C언어의 struct와 유사하다. 물론 배열 또한 메모리 위치들의 모음이지만 이 위치들의 이름은 자연수, index이다. SyntaxE → ... | {} | { x:= E, y := E } | E.x | E.x := E ValuesVal = Z + Bool + {.} + Procedure + Record + Loc Procedure = Var × E × Envr ∈Record = Field → Locp ∈ Env = Var → Locσ ∈ Mem = Loc → Val Semantics빈 레코드의 결과는 . 이고, 메모리는 바뀌지 않는다. x := E1, y := E2로 초기화 되는 레코드를 생성한다.환..
Syntax & SemanticsSyntax : 메모리 위치 생성 및 사용 (변수 선언, 할당 참조 등)신텍스는 프로그래밍 언어에서 메모리 위치 생성 및 사용하는 방법을 정의한다. 이를 통해 변수나 데이터 구조를 저장하고 조작할 수 있다. Semantics: 메모리 상태 조작 (특정 변수에 값 할당 시, 메모리 위치에 새로운 값 저장)시맨틱스는 프로그램이 실행될 때 메모리의 상태가 어떻게 변하는지를 정의한다. 변수에 값을 할당하거나 변수 값을 변경하는 작업을 포함한다. 언어의 상태를 추가함으로써 메모리의 상태를 동적으로 변화시킬 수 있고, 단순한 값 계산 외로도 다양한 부수 효과를 처리할 수 있다. let counter = 0in let f = proc (x) (let counter = counter +..
모테트13세기 음악이 다성화되는 과정에서 발달한 장르- 그레고리오 성가의 일부를 빌려와 성부를 하나씩 추가하며 다성부 만듦- 성가 발췌한 부분을 중심 성부 "테노르", 그에 상응하는 새로운 성부 창작- 새로운 성부에 기존과 다른 가사를 붙임- 성부마다 가사가 다르기 때문에 각 성부의 프레이징도 달라짐→ 각 성부가 독립적이면서도 조화를 이뤄 음악적 소우주를 형성한다고 여겨짐 아이소리듬 모테트- 모테트가 갖는 복잡성을 구조적으로 해결하기 위해 "동형 리듬" 음악 장치 고안- 테노르 성부에서 리듬형(탈레아)와 선율형(콜로르)을 패턴화해 각각 독립 순환- 이중적 의미 부여, 은유적으로 정치 사회 풍자 필립드 비트리, 모테트 카논모방을 통해 새로운 성부를 이끌어내거나 음악을 진행시키는 다성 음악 기법- 엄격 ..
민족주의 음악19세기 나폴레옹 전쟁 이후 유럽 대륙에 민족주의 운동 확산- 정치적: 분열된 민족의 통일이나 민족의 독립, 자치권 얻기 위한 운동- 문화적: 서유럽의 문화 헤게모니에서 벗어나 문화 정체성 찾으려는 노력 → 서유럽 이외 국가의 음악 발달 촉진- 다양한 국가에서 자민족 고유의 문화적 특색과 정체성 반영하려 노력- 음악가가 나고 자란 지리적 환경, 평범한 민중의 삶과 정취, 민족 의식, 애국심 등 투영- 민족 선율, 민속춤 리듬, 음계 등에서 고유의 소리 요소를 찾아내 창작 활동에 반영- 이러한 요소가 클래식 음악 안에 녹아들며 다채롭고 독창적인 음악 정취 형성 러시아- 서구 진영, 민족주의 진영으로 양분- 민족주의 작곡가 그룹 "러시아 5인조"- 민속 음악 재료 적극 활용하여 러시아 고유의 색..