Przykladowe tematy programow zaliczeniowych z programowania funkcyjnego:

0. Duzo przykladow jest tu


1. Roztrapezowywanie zdjęć

Moj aparat ma dosc szerokokatny obiektyw, co powoduje, ze niektore
zdjecia sa lekko powykrzywiane, patrz np.
http://www.mimuw.edu.pl/~chrzaszcz/PF2006/Zdjecia/
Chcialbym miec program, ktory wyswietli dane zdjecie i bedzie mozna
wskazac 2 proste, ktore w rzeczywistosci sa rownolegle, a na obrazku
nie i on je "zrownolegli", albo troche zrownolegli.
Do zrobienia tego trzeba by uzywac biblioteki camlimages, funkcyjnosc
moglaby byc widoczna np. w sposobie przekazywania polecen pomiedzy
logika i ui


2. Pomocnik do ustalania precedencji symboli w gramatyce

Zakladajac, ze ma sie juz pewne symbole, np. +
ma precedencje 10, a * 20, z czego wynika, ze wyrazenie x+y*z czyta
sie jako x+(y*z). Teraz ja chce wprowadzic 3. symbol, powiedzmy | i sam
nie wiem jaka powinien on miec precedencje. Zgaduje, ze 15. Wtedy
system powinien mi wygenerowac sensowne przyklady wyrazen z | i
"sasiednimi" symbolami wg precedencji, np:

x|y+z -> (x|y)+z
x|y*z -> x|(y*z)

I ja, stosownie do tego, czy dana precedencja mi odpowiada, czy nie,
moglbym ja zaakceptowac, badz ustalic inna. Jak sie zgodze, to system
zapisuje sobie powiekszona gramatyke, zeby za chwile mozna bylo
eksperymentowac z kolejnym symbolem.
To mozna rozszerzac o asocjatywnosc lewa lub prawa (np, a-b-c =
(a-b)-c, ale a->b->c = a->(b->c) ), symbole niekoniecznie binarne, a
docelowo integracje z prawdziwymi gramatykami camlp4... :)


3. Parser plikow .class wraz z pretty-printerm do Coq'a [Coqa znac nie trzeba], napisany w jezyku Scala

Scala to jezyk funkcyjny, kompilujacy sie do JVMa.

W sumie parser juz jest, pretty-printer tez, tylko, ze oba w Javie.
Parser to porzadny kawal roboty (biblioteka BCEL), a pretty-printer
sam napisalem i jest dosc kiepski (nie obsluguje overloadingu,
rekurencyjnie zapetlonych klas itp).

W projekcie chodziloby o to by:
1) zbadac jak w praktyce wyglada "interoperabilnosc" Scali i Javy
(teoretycznie jest wysoka)
2) napisac lepszy pretty-printer
3) miec potem zwiezly kod w jezyku funkcyjnym, ktory latwiej byloby w
przyszlosci rozwijac