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 ;)
niedziela, 25 października 2009
Subskrybuj:
Komentarze do posta (Atom)
Brak komentarzy:
Prześlij komentarz