Sananmuunnos Docs
Fall 2025
API

# o1.sananmuunnos

package o1.sananmuunnos

## Members list

### Type members

#### Classlikes

class Sana(`merkkijono`: String)

Kukin `Sana`-tyyppinen olio kuvaa yhtä suomen kielen sanaa. Tavallisesta merkkijonosta `Sana`-olio eroaa eritoten siten, että sillä on metodi `muunnos`, jonka avulla voi muodostaa lasten ja lapsenmielisten suosimia sananmuunnoksia. Sananmuunnos saadaan yhdistämällä kahden sanan äänteitä (tässä: merkkejä) tiettyjen sääntöjen mukaan.

Kukin `Sana`-tyyppinen olio kuvaa yhtä suomen kielen sanaa. Tavallisesta merkkijonosta `Sana`-olio eroaa eritoten siten, että sillä on metodi `muunnos`, jonka avulla voi muodostaa lasten ja lapsenmielisten suosimia sananmuunnoksia. Sananmuunnos saadaan yhdistämällä kahden sanan äänteitä (tässä: merkkejä) tiettyjen sääntöjen mukaan.

Sananmuunnos muodostetaan pääpiirteissään siten, että otetaan kaksi sanaa, vaihdetaan niiden alkupään merkkejä keskenään ja pannaan syntyneet sanat peräkkäin. Ilmiöön liittyy kuitenkin koko joukko yksityiskohtia, joista lisää alla.

### Sananmuunnoksen muodostamisen perusteet

Helppo perustapaus: sanat ovat "henri" ja "kontinen". Otetaan kummastakin ensimmäinen konsonantti ja sitä seuraava vokaali: saadaan "he" ja "ko". Vaihdetaan päittäin ja saadaan sananmuunnos:

`henri kontinen → konri hentinen`

`tarja halonen → harja talonen`

Jos sana alkaa usealla peräkkäisellä konsonantilla, siirretään ne kaikki toiseen sanaan. Jos taas konsonantteja ei alussa ole, vain ensimmäinen vokaali siirtyy:

`frakki kontti → kokki frantti`

`ovi kello → kevi ollo`

Yllä olevissa esimerkeissä kaikki vokaalit olivat ”lyhyitä” eli niissä oli vain yksi merkki. Jos sama ensivokaalimerkki esiintyy sanassa useasti peräkkäin, muodostuu ”pitkä” vokaali. Vokaalin pituus säilyy samana myös toiseen sanaan siirtäessä, vaikka itse vokaalimerkki voikin vaihtua:

`haamu kontti → koomu hantti`

Tarkempi selonteko edellisestä: Sanassa "haamu" on pitkä vokaali "aa". Kun sanan alkupää korvataan kirjaimilla k ja o, säilyy vokaalin pituus ja saadaan "koomu" eikä "komu". Sanassa "kontti" on puolestaan lyhyt vokaali "o". Kun sen alkupää korvataan merkeillä h ja a, saadaan "hantti" eikä "haantti".

Vaikka ensimmäisessä tavussa saattaakin olla useita eri vokaaleja, vain ensimmäisellä on tässä merkitystä:

`hauva kontti → kouva hantti`

`puoskari kontti → kooskari puntti`

### Vokaalisointu

Suomessa on kahdenlaisia vokaaleja: etuvokaaleja (e, i, ä, y, ö) ja takavokaaleja (a, u, o). (Nimet liittyvät siihen, missä osassa suuta vokaalit äännetään.) Vokaalisoinnuksi kutsutun kieli-ilmiön vuoksi takavokaalit a, u ja o eivät tavallisesti esiinny samassa sanassa niitä vastaavien etuvokaalien ä, y ja ö kanssa.

Sananmuunnoksiin vokaalisointu liittyy seuraavasti. Jos mikä tahansa takavokaaleista a, u tai o sijoitetaan sanan alkuun, niin kaikki sanassa esiintyvät etuvokaalit ä, y ja ö on vaihdettava niitä vastaaviksi takavokaaleiksi. Niin käy tässä y- ja ä-kirjaimille, joka muuttuvat u:ksi ja a:ksi.

`köyhä kontti → kouha köntti`

Sama toimii myös toisin päin eli etuvokaaleista takavokaaleiksi. Tässä syntyvän sananmuunnoksen ensimmäiseen osaan tulee vain etuvokaaleita ja toiseen vain takavokaaleita:

`hauva läähättää → läyvä haahattaa`

Äänteen muuntumista toisen kaltaiseksi sanotaan assimilaatioksi. Vokaalit e ja i eivät assimiloidu suuntaan tai toiseen eivätkä aiheuta assimilaatiota toisissa vokaaleissa.

Huomaa, että vokaalisointua ”sovelletaan” jo ennen kuin sananmuunnoksen kaksi osaa yhdistetään. Vokaalisointu ei siis aiheuta muutoksia ”sanarajojen yli”, kuten yllä olevasta esimerkistä voi nähdä.

### Lisäesimerkkejä

Alla on vielä muutama esimerkki sananmuunnoksista:

`frakki stressi → strekki frassi`

`äyskäri kontti → kouskari äntti`

`hattu sfääri → sfätty haari`

`ovi silmä → sivi olma`

`haamu prätkä → präämy hatka`

`puoskari sfääri → sfäöskäri puuri`

`puoskari äyskäri → äöskäri puuskari`

### Tämä riittäköön tähän

Todellisen elämän sananmuunnoksiin liittyy tässä kuvattujen lisäksi eräitä muitakin sääntöjä, mutta niitä ei käytetä tässä. On erilaisia erikoistapauksia kuten lainasanat, jotka eivät noudata vokaalisointua ("vampyyri"), sekä yhdyssanat ("jääkiekko"). Tämän luokan toteutuksessa tällaiset tapaukset jätetään huomioimatta ja oletetaan, että vokaalisointu on aina tiukasti voimassa.

## Parameters

merkkijono

  sana, joka toimii toisena puoliskona sananmuunnoksessa (esim. "kontti"). Tämä merkkijono saa sisältää isojakin kirjaimia, mutta `Sana`-olio tulkitsee kaikki kirjaimet kuin ne olisivat pieniä.

## Attributes

Companion
  object
Supertypes
  class Object
  trait Matchable
  class Any

object Sana

Tämä `Sana`-luokan kumppaniolio tarjoaa yhden metodin, jonka avulla sananmuunnoksia on hieman kätevämpi tehdä.

Tämä `Sana`-luokan kumppaniolio tarjoaa yhden metodin, jonka avulla sananmuunnoksia on hieman kätevämpi tehdä.

## Attributes

See also

  Sana-luokka

Companion
  class
Supertypes
  class Object
  trait Matchable
  class Any
Self type
  Sana.type

### Value members

#### Concrete methods

def assimiloi(`mika`: Char, `mihin`: Char): Char

Palauttaa ensimmäisen parametrimerkin siirrettynä "taakse" tai "eteen" sen perusteella, millainen jälkimmäinen parametrimerkki on. Ensimmäisestä merkistä siis palautetaan sellainen versio joka muistuttaa ääntämispaikaltaan jälkimmäistä merkkiä.

Palauttaa ensimmäisen parametrimerkin siirrettynä "taakse" tai "eteen" sen perusteella, millainen jälkimmäinen parametrimerkki on. Ensimmäisestä merkistä siis palautetaan sellainen versio joka muistuttaa ääntämispaikaltaan jälkimmäistä merkkiä.

Tarkemmin sanoen:

Jos ensimmäinen parametrimerkki vastaa "muuttuvaa takavokaalia" (a, o, u) ja toinen parametri "muuttuvaa etuvokaalia" (ä, ö, y), niin palautetaan ensimmäinen merkki "etuvokaaliksi vaihdettuna". Esimerkiksi `assimiloi('a', 'y')` palauttaa ä-merkin.

Jos ensimmäinen parametrimerkki vastaa "muuttuvaa etuvokaalia" (ä, ö, y) ja toinen parametri "muuttuvaa takavokaalia" (a, o, u), niin palautetaan ensimmäinen merkki "takavokaaliksi vaihdettuna". Esimerkiksi `assimiloi('ä', 'u')` palauttaa a-merkin.

Kaikissa muissa tapauksissa palautetaan ensimmäisenä parametriksi saatu merkki sellaisenaan.

## Attributes

def eteen(`symboli`: Char): Char

Jos parametriksi annettu merkki vastaa "muuttuvaa takavokaalia" (a, o, u), palauttaa sitä vastaavan etuvokaalin (ä, ö, y). Muussa tapauksessa palauttaa annetun merkin sellaisenaan.

Jos parametriksi annettu merkki vastaa "muuttuvaa takavokaalia" (a, o, u), palauttaa sitä vastaavan etuvokaalin (ä, ö, y). Muussa tapauksessa palauttaa annetun merkin sellaisenaan.

## Attributes

def onKirjain(`symboli`: Char): Boolean

Palauttaa `true`, jos parametriksi annettu merkki kuuluu suomen kielen perusaakkosiin eli on sellainen merkki, jota käytetään suomessa jonkin vokaalin tai konsonantin kuvaamiseen. Palauttaa `false` muutoin.

Palauttaa `true`, jos parametriksi annettu merkki kuuluu suomen kielen perusaakkosiin eli on sellainen merkki, jota käytetään suomessa jonkin vokaalin tai konsonantin kuvaamiseen. Palauttaa `false` muutoin.

## Attributes

def onKonsonantti(`symboli`: Char): Boolean

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin konsonanttia, `false` muutoin.

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin konsonanttia, `false` muutoin.

## Attributes

def onMuuttuvaEtuvokaali(`symboli`: Char): Boolean

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin "muuttuvaa etuvokaalia" (ä, ö, y), `false` muutoin.

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin "muuttuvaa etuvokaalia" (ä, ö, y), `false` muutoin.

## Attributes

def onMuuttuvaTakavokaali(`symboli`: Char): Boolean

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin "muuttuvaa takavokaalia" (a, o, u), `false` muutoin.

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin "muuttuvaa takavokaalia" (a, o, u), `false` muutoin.

## Attributes

def onMuuttuvaVokaali(`symboli`: Char): Boolean

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin "muuttuvaa vokaalia" (a, ä, o, ö, u, y), `false` muutoin.

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin "muuttuvaa vokaalia" (a, ä, o, ö, u, y), `false` muutoin.

## Attributes

def onVokaali(`symboli`: Char): Boolean

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin vokaalia, `false` muutoin.

Palauttaa `true`, jos parametriksi annettu merkki vastaa suomen kielen perusaakkosissa jotakin vokaalia, `false` muutoin.

## Attributes

def taakse(`symboli`: Char): Char

Jos parametriksi annettu merkki vastaa "muuttuvaa etuvokaalia" (ä, ö, y), palauttaa sitä vastaavan takavokaalin (a, o, u). Muussa tapauksessa palauttaa annetun merkin sellaisenaan.

Jos parametriksi annettu merkki vastaa "muuttuvaa etuvokaalia" (ä, ö, y), palauttaa sitä vastaavan takavokaalin (a, o, u). Muussa tapauksessa palauttaa annetun merkin sellaisenaan.

## Attributes

#### Concrete fields

val Konsonantit: String

merkkijono, joka sisältää kaikkia suomen kielen konsonantteja vastaavat kirjoitusmerkit

merkkijono, joka sisältää kaikkia suomen kielen konsonantteja vastaavat kirjoitusmerkit

## Attributes

val MuuttuvatEtuvokaalit: String

merkkijono, joka sisältää kaikkia suomen kielen "muuttuvia etuvokaaleita" (ä, ö, y) vastaavat kirjoitusmerkit

merkkijono, joka sisältää kaikkia suomen kielen "muuttuvia etuvokaaleita" (ä, ö, y) vastaavat kirjoitusmerkit

## Attributes

val MuuttuvatTakavokaalit: String

merkkijono, joka sisältää kaikkia suomen kielen "muuttuvia takavokaaleita" (a, o, u) vastaavat kirjoitusmerkit

merkkijono, joka sisältää kaikkia suomen kielen "muuttuvia takavokaaleita" (a, o, u) vastaavat kirjoitusmerkit

## Attributes

val Vokaalit: String

merkkijono, joka sisältää kaikkia suomen kielen vokaaleita vastaavat kirjoitusmerkit

merkkijono, joka sisältää kaikkia suomen kielen vokaaleita vastaavat kirjoitusmerkit

## Attributes