Smalltalk – najczystszy z obiektowych języków programowania

Śmiało można rzec, że paradygmat programowania obiektowego jest obecnie najpopularniejszym i najpowszechniej używanym. Większość języków głównego nurtu, jak chociażby C++, Java, Python, C# czy JavaScript, pozwala na tworzenie oprogramowania właśnie w sposób obiektowy. Co więcej, paradygmat ten ma już swoje lata, bowiem pierwszy język obiektowy powstał już ponad 50 lat temu (pisałem o tym w […]

Read More

Pięć sposobów na… silnię w Haskellu!

Jak zaimplementować w Haskellu funkcję, obliczającą silnię? Każdy, kto chociaż zetknął się z tym językiem, będzie na pewno wiedział, że do gry powinna wkroczyć rekurencja. Chcąc wyliczyć n! dla n>0 będziemy liczyć n * (n-1)!, a warunkiem kończącym naszą rekurencję będzie zwrócenie wartości 1 dla 0!. Wielu początkujących ma jednak problem z tym, której konstrukcji […]

Read More
Oryginalne mixiny, czyli lody z domieszkami

Mixiny w językach programowania

O ile takie pojęcia jak polimorfizm, dziedziczenie czy agregacja są doskonale znane adeptom programowania obiektowego, o tyle świadomość istnienia mixinów nie wydaje się być już tak powszechna. Spotykane niekiedy polskojęzyczne określenie to domieszka. Oryginalna nazwa wywodzi się od lodziarni działającej w amerykańskim Somerville, w której serwowano desery w dość oryginalny sposób – klientom oferowano kilka podstawowych smaków lodów, do których mogli oni […]

Read More

OCaml: funkcje i ich sygnatury

Dla osób przybywających ze świata programowania imperatywnego zobaczenie jak wyglądają typy, które OCaml dedukuje dla definiowanych przez programistę funkcji, często rodzi pewne pytania i niejasności. Zawierająca strzałki notacja na pierwszy rzut oka nie wydaje się najbardziej oczywistym sposobem na wyrażenie np. faktu, że funkcja przyjmuje trzy argumenty typu int i zwraca zmienną tego samego typu. […]

Read More

Relacje przechodnie w Prologu

W jednym z wcześniejszych wpisów poruszałem temat definiowania relacji symetrycznych w języku Prolog. Rozwiązaniem problemu okazało się tam zdefiniowanie relacji pomocniczej, dzięki której pozbywaliśmy się nieskończonej pętli wywołań. Podobnie jest i w tym przypadku, bowiem i tu definiowanie takiej relacji w sposób „naiwny” i „naturalny” nie zdaje egzaminu. Rozważmy taki oto przykład, w którym szeregujemy kraje […]

Read More

Deklaratywne wyzwanie na listopad: Prolog

Ze smutkiem muszę stwierdzić, że studia, które całkiem niedawno ukończyłem, chociaż przekazały mi całkiem sporo wiedzy związanej z różnymi działami informatyki, jej zastosowaniami oraz teoretycznymi podstawami, to w kwestii języków programowania ukazywały studentom jedynie bardzo wąski wycinek rzeczywistości. Nie mam tu na myśli tego, że uczelnia powinna organizować zajęcia z większej liczby technologii, że powinna […]

Read More