ラテン語の名詞は、男性、女性、中性という性のグループの3種類、単数と複数という数のグループの2種類、 そして名詞の働きを示す格というグループの6種類に応じて形を変える。 以下、JavaScript で書いてみた。
ラテン語の名詞の格変化については、単数主格と単数属格を書くことで示される、と説明されている。 そこで、単数主格と単数属格から格変化を調べる JavaScript の書き方を示す。
名詞を構造体でもつことを考える。 まず、名詞には単数と複数がある。 単数、複数それぞれに、主格、対格、属格、与格、奪格を入れておく。なお、呼格はほとんど主格と同じであり、 異なるのは第2変化名詞で -us 型かつ単数のみであるので あえて区別しなかった。また、地格は対象語句が少ないため省略した。 初期化には、単数主格 nom と単数属格 gen の2つの引数を必要とする。
function Nomen(nom, gen) {
// 単数
this.sg.n = nom; // 単数主格
this.sg.ac = ... // 単数対格
this.sg.g = f(nom, gen) // 単数属格
this.sg.d = ... // 単数与格
this.sg.ab = ... // 単数奪格
// 複数
this.pl.n = ... // 複数主格
...
this.pl.ab = ... // 複数奪格
}
なお、格を並べる順番は、通例では主格、呼格、属格、与格、対格、奪格であるが、ここでは呼格を省き、かつ主格、対格、属格、与格、奪格の順とした。 主格と対格が、また与格と奪格が同じ形である活用が多く、同じ形を隣に持って来ればよくわかるだろうという考えである。
第一変化は、単数主格の末尾が a で終わり、かつ単数属格は ae で終わる。
例えば辞書には、 rēgīna, ae, f のように載っているだろう。
判定には、単数主格 nom の末尾が a で終わるという表現が、そのまま nom.match(/a$/)
という正規表現になることを利用すればいい。
ただし、a で終わる単語が辞書に載っていながら、第二変化となるものがある。
これは単数では使われず複数でのみ使われるためである。
arma と castra がその例である。これらは単数としては使われないからだ。
したがって、第一変化であることを確実とするには、まず 主格が "a" で終わっていることを調べたうえで、
属格が "ae" なら第一変化で単数あり、"ārum" なら第二変化で単数なし、ということでより確実な判断材料となる。
function Nomen(nom, gen) {
if (nom.match(/a$/) && gen.match(/ae$/)) { // 第一変化
// 単数
this.sg.n = nom; // 単数主格
this.sg.ac = nom.replace(/a$/, "am") // 単数対格
this.sg.g = nom.replace(/a$/, "ae") // 単数属格
this.sg.d = nom.replace(/a$/, "ae") // 単数与格
this.sg.ab = nom.replace(/a$/, "ā") // 単数奪格
// 複数
this.pl.n = nom.replace(/a$/, "ae") // 複数主格
this.pl.ac = nom.replace(/a$/, "ās") // 複数対格
this.pl.g = nom.replace(/a$/, "ārum") // 複数属格
this.pl.d = nom.replace(/a$/, "īs") // 複数属格
this.pl.ab = nom.replace(/a$/, "īs") // 複数奪格
}
}
第二変化は、大きく分けて2種類、細かく分けて3種類から4種類の形がある。 大きく分けた場合の一つは -us, -er 型、もう一つは -um 型だ。
まず -us, -er 型から見る。第二変化の単数主格の末尾が us で終わっていれば、単数属格は ī で終わるので、ここの gen は "ī" が入っている。
例えば辞書には、 rēgūlus, ī, m のように載っているだろう。
なお、-us は第二変化だけでなく第四変化にも表れる。単数属格は ī で終わるのが第二変化であるので、これも同時に確かめること。
判定には、単数主格 nom の末尾が us で終わるという表現をそのまま nom.match(/us$/)
という正規表現に落とせばいい。
これと単数属格 ī を利用して、gen.match(/ī$/)
で判定する。
語尾変化は replace メソッドを使えばいい。なお、単数呼格が単数主格と異なるのはこの形だけであるのでこれにも注意する。
-er 型は -us 型の変種である。単数主格、単数呼格以外で、er の e が脱落するものと脱落しないものがある。
これは、属格の引数が、erī であれば e は脱落しないが、ほかの brī, prī, trī などであれば e は脱落する。
これは gen.match(/erī$/)
の結果で判断する。
単数主格の末尾が um で終わっていれば、um 型の活用をする。 この場合、対格の単複も呼格の単複と同じである。また um 型では単数属格には"ī"が入る。 なお、主格が um で終わらず、a で終わる単語もあるが、これは複数主格である。 単数では使われることがないためで、arma と castra がその例である(第一変化で記述)。 このとき、属格引数は複数属格 "ōrum" が入っている。これは複数属格を表している。
第三変化の名詞は主格の終わりがまちまちである。だから名詞の変化で一番難物なのはこの第三変化である。
参考に挙げた本では、第三変化名詞は子音幹が基本。i 幹は例外とみなせ
とある。このプログラムでは、
第三変化の実装はその多岐性ゆえに一部にとどまる。
第四変化では、単数主格が us で終わる単語がほとんどである。第二変化の -us, -er 型と混同しないこと。また、第三変化にも -us で終わる単語がある。 第四変化の -us は、単数属格が "ūs" となる。したがって判定も単数主格と単数属格の合わせ技となる。
第四変化の中には、cornū, genū など、u で終わるのも数語ある。
第五変化では、単数主格が es で終わる単語がほとんどである。第三変化の -es 型と混同しないこと。 第五変化の単数属格は ēī か ĕī である。語幹が ē となるか ĕ となるかの影響を受けるのは、 単数属格と単数与格のみである。単数属格はもともと指定で、単数与格は単数属格と同じであるからだ。 他はどうかというと、単数対格のみ語幹は短い ĕ 、その他の格は語幹は必ず長い ē である。一部だけ抜け出せばこうなる。
this.sg.g = nom.replace(/es$/, gen) // 単数属格
this.sg.d = nom.replace(/es$/, gen) // 単数与格
下記は学習プログラムである。[表示]のボタンをクリックすると、単語と意味、変化形が表示される。
参考:はじめてのラテン語
まりんきょ学問所 > JavaScript 手習い > ラテン語学習