전체 글

푸더기의 다사다난한 블로그입니다
리트 리트는 낭만주의 시대(19세기)에 유행한 장르로, 독일 예술 가곡이다. 시에 붙인 노래로, 독일어 시에 노래 선율과 피아노 반주를 붙인 음악이다. 18세기 후반 괴테 등의 문학가에 의해 서정시 문학이 꽃피며 작곡이 활발해졌고, 피아노의 매커니즘 개선과 대중화로 리트 발달이 촉진되었다. 프랑스 시에 붙인 노래는 멜로디라고 한다. 슈만 7곡 성 위에서 연결성이 없어보이는 시의 두 이야기를 동일한 멜로디로 묘사하여 청자가 둘 사이에 동일한 정서가 흐르는 것처럼 느끼게 한다. 노래는 전주 없이 바로 시작되고 피아노는 화음 위주로 간결히 반주하며 느리게 진행한다. 정적인 분위기의 반주로 모든 것이 멈춘 듯, 폭발하는 슬픔보다는 절제되고 깊은 고독감의 정서를 불러일으킨다. 연가곡 슈베르트는 18세기 후반~1..
서양 종교 음악 전례를 위해 만들어지고 사용된 기능 음악이다. 구교(가톨릭) 음악은 중세, 르네상스 시기에 주로 발달하였고 그레고리오 성가와 미사곡이 있다. 신교(프로테스탄트) 음악은 종교개혁 이후부터 바로크 시기에 주로 발달하였다. 코랄과 칸타타가 있다. 중세 성가 - 구교 음악 그레고리오 성가 로마 가톨릭 교회의 단성 성가로, 악기 반주가 없는 아카펠라 음악이다. 초기에는 라틴어로 된 가사를 갖는 단성 성가였으나 점차 다성화되었다. 가톨릭 전례에서 부르며 성무일도(시간 전례)는 수도원에서 매일 드리는 전례, 미사 전례는 성직자와 일반인에게 개방된 전례를 뜻한다. 미사 전례는 고유문과 통상문으로 나뉘는데, 고유문은 교회력의 절기에 따라 가사가 바뀌는 부분, 통상문은 항상 같은 가사로 불리는 부분이다. ..
협주곡(Concerto) 협주곡은 두 음향 매체가 서로 대비 또는 조화를 이루며 발생하는 아름다움을 추구한다. 합주 협주곡 : 리피에노 + 콘체르티노 (큰 악기 그룹 + 작은 악기 그룹) 독주 협주곡 : 오케스트라 + 독주 악기 (큰 악기 그룹 + 독주 악기(들)) 비발디 봄 1악장 사계는 비발디의 바이올린 협주곡으로, 사계절의 이미지를 음악으로 묘사한 작품이다. 오케스트라와 함께 바이올린 솔로가 독립적인 선율을 연주한다. 즉, 이 곡은 독주 협주곡에 속한다. 리토르넬로 형식은 바로크 협주곡에서 주로 사용된 음악 형식으로, 같은 주제가 되풀이되는 리토르넬로 파트와 새로운 내용의 에피소드 파트가 서로 교대하며 진행된다. 이 곡에는 총 4개의 에피소드가 존재하며, 리토르넬로 파트에선 오케스트라와 바이올린이 ..
Procedures를 추가해보자 P → E // 프로그램은 표현식으로 구성된다. E → n // 표현식은 다음 중 하나일 수 있다. | x // 변수 생성 가능 | E + E // 덧셈 가능 | E - E // 뺄셈 가능 | (E) // 괄호 가능 | iszero E // 간단한 함수 (0인지 확인) | if E then E else E // 조건문 가능 | let x = E in E // 지역 변수에 표현식 할당 | read // 입력 5강에서, 우리는 위 Syntax를 만들었었다. 우리는 이제 여기에 아래 두 개를 추가할 것이다. | proc x E | E E proc x E는 인자 x를 받아 E를 실행하는 함수를 정의한다. E E는 함수를 호출하는데 사용될 것이다. Free/Bound Variabl..
Syntax & Semantics 프로그래밍 언어를 설계할 때 가장 중요한 두 가지 요소는 문법(Syntax)과 의미(Semantics)이다. Syntax는 프로그램을 어떻게 작성해야 하는지에 대한 규칙을 정의한다. 프로그램의 구조를 결정하고, 변수, 키워드, 연산자, 구문 등 언어의 요소들이 어떻게 조합되어야 하는지를 명시한다. Semantics는 프로그램이 실제로 어떤 동작을 수행하는지에ㅍ 대한 정의이다. Syntax와 Semantics는 귀납적 정의(Inductive Definitions)로 명시될 수 있다. 첫 번째 언어 구축 먼저, Let이라는 이름의 간단한 언어를 만들어보자. Syntax P → E // 프로그램은 표현식으로 구성된다. E → n // 표현식은 다음 중 하나일 수 있다. | x..
재귀와 고차함수 재귀와 고차함수를 사용함으로써 코드의 의도를 더 명확하게 표현하고 유지 관리가 쉬워지며 오류 가능성이 줄어든다. 즉 더 효율적이고 강력한 프로그래밍이 가능하다. 여기서 고차함수란 함수를 인자로 받거나 함수를 반환하는 함수를 의미한다. 예를 들어 map, filter, reduce와 같은 고차 함수들은 리스트나 배열을 처리할 때 반복되는 패턴의 코드를 간결하게 만들어 주고 재사용성과 모듈성을 향상시킨다. 재귀적 문제 해결 전략은 세 단계로 구분된다. 1. 분해 : 주어진 문제를 더 작고 동일한 구조를 가진 여러 부분 문제로 나눈다. 2. 해결 : 분해된 각 부분 문제를 재귀적으로 해결한다. 3. 통합 : 각 부분 문제의 해결 결과를 통합하여 전체 문제의 해결책을 도출한다. 아래는 예시들이다..
OCaml? OCaml은 함수형 프로그래밍 언어로, 이름대로 ML 프로그래밍 언어 계열에 속한다. 정적 타입 시스템으로 프로그램의 타입 안정성을 보장하며, 컴파일 시간에 변수의 타입을 추론한다. 함수형 프로그래밍 언어이므로 변수는 기본적으로 불변성을 가진다. 함수가 일급 객체로 취급되어, 함수는 다음의 특징을 가진다. - 함수 할당: 함수를 변수에 할당할 수 있다. - 함수 인자: 함수를 다른 함수의 인자로 전달할 수 있다. - 함수 반환: 함수에서 다른 함수를 반환할 수 있다. 하지만, 상태를 변경하는 명령형 프로그래밍도 가능하며 객체 지향 프로그래밍도 가능하다. 하지만 이는 이 카테고리에서 다루지 않겠다. 정적 타입 언어 (Statically Typed Language) OCaml은 정적 타입 언어이..
Natural Numbers 자연수 집합 N = {0,1,2,3...}를 귀납적으로 정의하면 /0, n/n+1 이다. 이 규칙은 다음과 같이 문법적으로 표현될 수 있다: n → 0 | n + 1 Strings 알파벳 집합 {a ... z}을 사용하여 문자열 집합을 정의해보자. 빈 문자열 ε이 있을 때, / ε , α / aα, α / bα ... α / zα 로 귀납적 정의할 수 있다. 문법적으로는, α → ε | xα (x ∈ {a,...,z})으로 나타낼 수 있다. Boolean Values 불린값 B = {true, false}는 유한한 값이다. 이는 그저 공리에 의해서 정의될 수 있다. /true, /false 문법적으로는, b → true | false 이다. Lists 리스트의 끝을 nil로 ..
푸더기
푸더기와 푸닥푸닥