라틴어에는 비인칭동사(verba impersonalia)가 있다. 비인칭동사란 일반적으로 주어가 없이 3인칭 단수로만 사용되는 동사를 말한다. 비인칭동사는 절대적 비인칭동사와 상대적 비인칭동사로 구분되는데, 절대적 비인칭동사는 기상과 감정을 표현하는 동사들로 오로지 비인칭적 용법으로만 사용된다. 다음은 날씨를 나타내는 라틴어 문장이다. Fulgurat. 번개가 치다. Pluit. 비가 내리다. Ningit. 눈이 내리다. Grandinat. 우박이 내리다. Tonat. 천둥이 치다. 그런데 사실 이러한 동사들도 (고전 라틴어를 사용하던 시대에 대해서) 고대에는 주어가 있었다. 고대에는 신이 날씨와 관련된 현상의 기원이라 생각했기 때문에 다음과 같은 표현을 사용했다. Iuppiter tonat. 천둥이 치..
영어와 한국어에 익숙한 사람들에게 라틴어를 비롯한 다른 인도유럽어족에 속하는 고전 언어 (헬라어나 산스크리트어 등)의 문법에는 낯설게 느껴지는 요소들이 상당히 있다. 일단 명사에는 성, 수, 격이 있는데 이들 언어는 굴절어이므로 명사의 어미를 바꾸어 이러한 문법적 요소들을 나타낸다. 비록 고대 영어는 상당히 복잡한 굴절어였지만 현대 영어는 굴절성이 상당히 약해진 언어이다. 명사에 대해서는 복수형에 -s라는 어미를 붙이는 것이 전부이기 때문이다. (동사에 관해서는 나중에 다룬다.) 또한 성이라는 개념이 거의 상실되어 있다. 하지만 라틴어는 세 가지 요소에 대해서 모두 어미가 달라진다. 첫 번째로 성(genus)에 대해서 설명해본다. 일단 puella(소녀)는 여성명사이고 puer(소년)은 남성 명사이다. ..
라틴어는 전통적으로 품사를 세 종류로 나누었다고 한다. 명사(nomen) 동사(verbum) 불변화사(particula) 명사는 다음과 같이 분류한다. 실명사(substantivum) 형용사(adiectivum) 수사(numerale) 대명사(pronomen) 불변화사는 다음과 같이 분류한다. 부사(adverbium) 전치사(praepositio) 접속사(coniunctio) 감탄사(interiectio) 이러한 분류방식은 유럽의 다른 언어에도 많은 영향을 주었다고 한다.
라틴어(lingua latina)는 이탈리아 반도의 중부에 있던 고대 로마(Roma) 그 주변의 넓은 평야지대인 라티움(Latium)에 정착하여 살단 사람들이 쓰던 언어였다. 로마가 지중해를 정복하면서 라틴어는 지중해 전역과 유럽의 상당 부분으로 퍼져나갔으며 공용어로 사용되었다. 오늘날에는 더 이상 원어민이 없는 사어가 되었지만 로망스어족이라고 부르는 프랑스어, 이탈리아어, 스페인어, 포르트갈어 등이 파생되어 사용되고 있다. 영어 역시 많은 어휘를 로망스어에서 들여왔으므로 라틴어의 영향 아래에 있다고 할 수 있으려나? 사실 영어를 배우다보면 비슷한 뜻인데 완전히 다른 것 같은 어휘들을 꽤 볼 수 있다. 예를들어 talk(게르만 계통)와 conversation(로망스 계통) 같은 것들이 있다. 그리고 비슷..
C++17 함수 템플릿 #001 함수 템플릿 (Function Templates) 함수 템플릿은 다양한 타입(type)에 대해 호출될 수 있는 어떠한 함수적인 동작을 제공한다. 함수의 일부 요소가 파라미터화(parameterized)되어 정해지지 않았다는 점을 제외하면 일반적인 함수와 거의 같다. 다음은 두 값 중에서 큰 값을 반환하는 함수 템플릿이다. /* max1.hpp */ template T max(T a, T b) { return b < a ? a : b; } 이 함수 템플릿의 정의는 함수 파라미터(parameter)로 전달된 a와 b라는 두 값 중에서 큰 값을 나타내는 함수들의 모임을 나타낸다. 함수 파라미터의 타입은 템플릿 파라미터(template parameter) T로 아직 정해지지 않은..
C++가 C언어를 포함한다고 오해하는 분들이 많습니다. 이는 사실과 다릅니다. 비록 C++은 C언어에 기능을 덧붙이는 것에서 시작했지만 현재의 표준안은 차이가 있습니다. 우선 정의를 하고 시작하겠습니다. ISO C (이하 C)는 ISO/IEC 9899:2011입니다. C++은 ISO/IEC 14882:2017입니다. 흔히 C++17라고도 합니다. ISO/IEC 9899:2011은 흔히 C11이라 부르는데 가장 표준적으로 사용하는 ISO/IEC 9899:1999 (이하 C99)에 여러 기능을 덧붙인 것입니다. 실무에서는 별로 사용하지 않는 것 같습니다. 현재(2020년 02월 16일)는 ISO/IEC 9899:2018이 가장 최신 표준이나 C11에 대한 새로운 기능 추가가 없습니다. 이 글은 C++17 표..
많은 사람들이 C++은 객체 지향형 언어라고 알고 있습니다. 이는 틀린 말이 아닙니다. 분명히 C++은 C언어에 여러 가지 요소들을 덧붙여서 객체 지향 패러다임을 구현했습니다. 하지만 설계자들이 처음부터 고려해서 만들지 않은 숨겨진 기능도 있습니다. 지금부터 알아볼 내용은 바로 그 숨겨진 기능입니다. 템플릿(template)은 일반적으로 일반화 프로그래밍(generic programming)을 지원하기 위해서 만들어진 것으로 배웁니다. 곧 타입(type)을 정하지 않고 컴파일 도중에 템플릿 매개변수에 적절한 타입을 집어넣어서 바이너리를 만듭니다. 그런데 조금 더 배우신 분들이나 표준 라이브러리의 std::array를 사용해보신 분들은 템플릿 매개변수에는 타입 외에도 정수형, 열거형, 함수 및 전역 객체에..
수학이나 과학을 하는 사람들이면 책과 논문에 있는 아름다운 수식을 보면서 HWP의 그것에 부족함을 느꼈을 것이다. 이 수식들은 Donald Knuth가 만든 조판 프로그램인 $\TeX{}$로 만든 것이다. 처음에는 문법이 익숙하지 않을 수 있지만 조금만 사용하다 보면 어느새 푹 빠져있는 자신을 발견할 수 있을 것이다. 각설하고 이 기념비적인 첫 번째 글은 티스토리에서 어떻게 수식을 조판하는지에 대해서 작성할 것이다. MathJax는 JavaScript로 작성된 라이브러리로 MathML이나 LaTeX와 같은 마크업 언어로 작성된 수식을 웹 브라우저에서 렌더링 해준다. 사용법은 간단하다. HTML 헤더(header)에 다음의 코드를 삽입하면 끝난다. HTML의 헤더는와로 싸여있는 부분이다. 티스토리 블로그의..