LatinVerb

In the Summer / Fall of 2007 I started Latin I at Austin Community College. I've always had an interest in language, human languages (Dutch, French, Spanish), and computer languages (Perl, Ruby, Java), so the pursuit of one of the genetic ancestors really appealed to me.

As anyone who has taken Latin knows, a great majority of the first semester is centered around learning to conjugate the voices / verbs / moods and persons of Latin Verbs.

As a canonical example, let us take the infinitive amāre, to love. Thence we extract the “stem” amā. To this we add the endings, in the indicative-active-present system: “o”, “s”, “t”, “mus”, “tis”, and “nt.”. This is how you would hear it taught in the current pædogogical method.

Being a programmer of the Ruby persuasion, I translated this process into Ruby code as:


>> %w(s t mus tis nt).collect{ |x| "ama#{x}" }.unshift('amo')
=> ["amo", "amas", "amat", "amamus", "amatis", "amant"]

With this Ruby-esque way of thinking about conjugation, I found that I was easily able to adapt to new conjugations and tenses. For example, that same array of endings could be applied to the subjunctive stem and give us our subjunctive set:


>> %w(m s t mus tis nt).collect{ |x| "ame#{x}" } 
=> ["amem", "ames", "amet", "amemus", "ametis", "ament"]	

Naturally, the array %w(m s t mus tis nt) could then be given a name and passed around as a variable. Following this method, a whole host of abstractions are possible.

The question I then asked myself was, could this be taken to the last degree, could a Ruby program resolve all the possible verb conjugations for the Latin regular verb population? The applications LatinIRB and Lingua Latina In Viis Ferrorum assert that the answer is “yes.”

For more on the development process, please follow through to “Development Process.”

LatinVerb was written by Steven G. Harms because he loves Latin and Ruby and wanted to carry one less book in his bookbag. Icons provided by pinvoke.