odmiana pl









/*
Odmiana nieosobowych rzeczowników męskożywotnych (np. 'baran', 'słoń',
'rak', 'lew', 'tygrys'...).

Aby wywolać program, należy zadać cel 'zacznij'.
*/

/* Informujemy interpreter, że predykaty forma i temat są
dynamiczne, tzn. mogą być dolączane do bazy i usuwane z niej. */
:- dynamic forma/4.
:- dynamic temat/2.

/* W wyrazie W zamienia końcówkę K1 na K2. Wynikiem jest nowy wyraz U.
Np. dla celu zamien_koncowke('koń', 'ń', 'nia', U) U przyjmie
wartość 'konia'.
Predykat w ogóle się nie powodzi, jeśli K1 nie jest końcówką W. */

zamien_koncowke(W, K1, K2, U) :-
atom_length(K1, DK1), /* DK1 to długość końcówki K1 */
sub_atom(W, LiczbaZnakowBezK1, DK1, 0, K1),
sub_atom(W, 0, LiczbaZnakowBezK1, _, Poczatek),
/* Poczatek to wyraz W bez końcówki K1 */
concat(Poczatek, K2, U). /* Łączymy wyraz z nową końcówką.*/


/* Wyznacza temat T dla rzeczownika W */
temat(W, T) :-
( zamien_koncowke(W, 'ć', 'ci', T), ! ;
zamien_koncowke(W, 'ń', 'ni', T), ! ; /* np. 'koni' dla 'koń' */
zamien_koncowke(W, 'ś', 'si', T), ! ;
T = W ).


/* forma(P, L, W, F) - F jest formą rzeczownika W dla przypadku P
i liczby L */

forma(dopełniacz, liczba_pojedyncza, W, F) :-
temat(W, T), concat(T, 'a', F). /* do tematu dodajemy końcówkę 'a' */

forma(celownik, liczba_pojedyncza, W, F) :-
temat(W, T), concat(T, 'owi', F).

forma(narzędnik, liczba_pojedyncza, W, F) :-
temat(W, T), concat(T, 'em', F).

forma(miejscownik, liczba_pojedyncza, W, F) :-
temat(W, T),
/* miękkotematowe (których temat kończy się na 'i') mają w miejscowniku
końcówkę 'iu' */
(zamien_koncowke(T, 'i', 'iu', F), ! ;
concat(T, 'ie', F)).

forma(mianownik, liczba_mnoga, W, F) :-
temat(W, T),
(zamien_koncowke(T, 'i', 'ie', F), !;
concat(T, 'y', F)).

forma(dopełniacz, liczba_mnoga, W, F) :-
temat(W, T),
(zamien_koncowke(T, 'i', 'i', F), !;
concat(T, 'ów', F)).

forma(celownik, liczba_mnoga, W, F) :-
temat(W, T), concat(T, 'om', F).

forma(narzędnik, liczba_mnoga, W, F) :-
temat(W, T), concat(T, 'ami', F).

forma(miejscownik, liczba_mnoga, W, F) :-
temat(W, T), concat(T, 'ach', F).


/* różne ogólne reguły */
forma(mianownik, liczba_pojedyncza, W, W).

/* biernik lp. jest równy dopełniaczowi lp. */
forma(biernik, liczba_pojedyncza, W, F) :-
forma(dopełniacz, liczba_pojedyncza, W, F).

forma(wołacz, liczba_pojedyncza, W, F) :-
forma(miejscownik, liczba_pojedyncza, W, F).

forma(biernik, liczba_mnoga, W, F) :-
forma(mianownik, liczba_mnoga, W, F).

forma(wołacz, liczba_mnoga, W, F) :-
forma(mianownik, liczba_mnoga, W, F).


menu :-
nl,
write('f - sprawdź formę fleksyjną'),nl,
write('w - wprowadź wyjątek'),nl,
write('t - wprowadź specjalny temat'),nl,
write('k - koniec działania'),nl.

wykonaj(102 /* f */) :-
write('podaj wyraz, przypadek i liczbę - każdy wprowadzany atom zakończ kropką i ENTEREM'), nl,
read(W),
read(P),
read(L),
( forma(P, L, W, U), !, write('znaleziona forma to: '), write(U) ;
write('nie znaleziono formy (być może wpisałeś mnoga zamiast liczba_mnoga?)')), nl.

wykonaj(119 /* w */) :-
write('podaj wyraz, przypadek, liczbę i właściwą formę'), nl,
read(W),
read(P),
read(L),
read(F),
asserta(forma(P, L, W, F) :- !).

wykonaj(116 /* t */) :-
write('podaj wyraz i właściwy temat'), nl,
read(W),
read(T),
asserta(temat(W, T)).

zacznij :-
repeat,
menu,
get_single_char(C),
(C = 107 /* k */; wykonaj(C), fail).
















Wyszukiwarka

Podobne podstrony:
TI 99 08 19 B M pl(1)
bootdisk howto pl 8
BORODO STRESZCZENIE antastic pl
notatek pl sily wewnetrzne i odksztalcenia w stanie granicznym
WSM 10 52 pl(1)
amd102 io pl09
PPP HOWTO pl 6 (2)
bridge firewall pl 3
NIS HOWTO pl 1 (2)
31994L0033 PL (2)
Jules Verne Buntownicy z Bounty PL
Blaupunkt CR5WH Alarm Clock Radio instrukcja EN i PL
Heidenhain frezarka iTNC 530 G kody pl
Sciaga pl Podział drukarek komputerowych

więcej podobnych podstron