niedziela, 25 października 2009

F# i gimnastyka umysłu

Ostatnio trafiłem na następujący artykuł (a właściwie jego tłumaczenie):

http://www.devblogi.pl/2009/09/niebezpieczne-java-szkoy.html

W dużym skrócie: autor ubolewa nad tym, że studentów informatyki nie uczy się już wskaźników ani rachunku lambda (i programowania funkcyjnego).
Artykuł powstał w USA w 2005 roku, ale widać że taka moda przychodzi już do Polski - na nowych studiach inżynierskich z informatyki na IZ na PWr naukę zaczyna się od Javy (a nie C++ jak kiedyś lub Pascala, jak kiedyś-kiedyś), przynajmniej kurs "Paradygmaty programowania" dra Spławskiego nadal uczy OCamla (jako dodatku do Oz) ;)

A ja, czytając ten artykuł, postanowiłem zacząć bawić się .NETowym językiem F# :)

Dlaczego on a nie powrót do starego dobrego OCamla? Parę powodów:

1. F# jest oparty na i wstecznie zgodny z OCamlem - czyli solidne podstawy już mam ;)
2. Ponieważ 4 rdzenie to już norma, programowanie funkcyjne może wrócić do łask - ponieważ od programowania funkcyjnego do współbieżnego nie jest daleko. Co już widać, bo...
3. ...F# staje się pełnoprawnym językiem Visual Studio 2010 (do Visual Studio 2008 można go dociągnąć jako dodatek). No i oczywiście...
4. ...za F# stoi cała biblioteka .NET - czyli nie jest źle :)

A czemu się w ogóle w to bawię? Po prostu OCaml mi się bardzo pozytywnie kojarzy, bo w niczym chyba tak szybko nie napisałem skomplikowanego programu (AI do warcabów) jak w OCamlu (zajęło mi to jakieś 20 godzin 2 lata temu) :)

Ok, to zaczynamy :)

F# można pobrać z http://fsharp.net/.

Moje pierwsze wrażenia po zabawie z Fis to faktyczna zgodność z OCaml (testowałem na warcabach :P). Potrzebne jest jednak parę sztuczek:
1. Plik z kodem w OCamlu musi mieć rozszerzenie .ml a nie .fs
2. Należy do projektu dodać referencję do FSharp.PowerPack (kompilator sam nam o tym wspomni w komunikacie o błędzie)

Ok, to na początek parę ćwiczeń dla umysłu z wykorzystaniem F# ;) Rozwiązania najchętniej widziane w komentarzach ;)

1. Własna funkcja zwracająca długość listy (rekurencja ogonowa).

2. Funkcja odwracająca listę (złożoność O(n) i rekurencja ogonowa).

*3. Sortowanie listy przez scalanie (merge sort). Pamiętaj o złożoności O(nlogn) i stabilności. Pierwszym argumentem sortowania powinna być funkcja porównująca, np. dla int byłaby to funkcja (<).

Do Fis-a jeszcze wrócę na pewno nie raz na łamach bloga ;)

Brak komentarzy:

Prześlij komentarz