Hej!
A jakby połączyć szablony z C++ z programowaniem funkcyjnym rodem z F#?
Niesamowity pomysł, spróbujmy zaimplementować liczby Fibonacciego z użyciem mechanizmy szablonów C++!
Wykorzystamy częściowe specjalizacje szablonów i technikę tzw. metaprogramowania, a nasz wynik zostanie wyliczony już w czasie kompilacji. Brzmi fajniej niż wektor elementów typu T, co?
Pokazywanie postów oznaczonych etykietą f#. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą f#. Pokaż wszystkie posty
sobota, 20 lutego 2010
czwartek, 7 stycznia 2010
F# - sortowanie przez scalanie
Większość P.T. Czytelników nie jest crazy na punkcie F#, ale ja się nie poddaje :P
W końcu rozwiązanie ostatniego ćwiczenia z http://wojtek-m.blogspot.com/2009/10/f-i-gimnastyka-umysu.html ;)
*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 (<).
W końcu rozwiązanie ostatniego ćwiczenia z http://wojtek-m.blogspot.com/2009/10/f-i-gimnastyka-umysu.html ;)
*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 (<).
wtorek, 24 listopada 2009
F# - wyniki gimnastyki
Ok, rozwiązań do F-szarpowych ćwiczeń z posta http://wojtek-m.blogspot.com/2009/10/f-i-gimnastyka-umysu.html nikt nie umieścił, więc pora na mnie :P
1. Własna funkcja zwracająca długość listy (rekurencja ogonowa).
Wersja bez rekurencji ogonowej jest dość oczywista:
let length l =
match l with
| [] -> 0
| h::t -> (length t) + 1
Rekurencję ogonową można osiągnąć z użyciem drugiego parametru, który będzie zliczał długość dotychczas przejrzanej listy - początkowo ma on wartość 0. Jeżeli dojdziemy do końca listy, zwracamy wartość tego parametru. Dzięki temu nie wykorzystujemy w ogóle stosu wywołań funkcji - działamy jak iteracyjna pętla ;)
let length l =
let rec length l acc =
match l with
| [] -> acc
| h::t -> length t (acc + 1)
in
length l 0
1. Własna funkcja zwracająca długość listy (rekurencja ogonowa).
Wersja bez rekurencji ogonowej jest dość oczywista:
let length l =
match l with
| [] -> 0
| h::t -> (length t) + 1
Rekurencję ogonową można osiągnąć z użyciem drugiego parametru, który będzie zliczał długość dotychczas przejrzanej listy - początkowo ma on wartość 0. Jeżeli dojdziemy do końca listy, zwracamy wartość tego parametru. Dzięki temu nie wykorzystujemy w ogóle stosu wywołań funkcji - działamy jak iteracyjna pętla ;)
let length l =
let rec length l acc =
match l with
| [] -> acc
| h::t -> length t (acc + 1)
in
length l 0
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# :)
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# :)
Subskrybuj:
Posty (Atom)