W jednym z ostatnich wpisów dotyczących Prologa, poruszyłem temat modularyzacji, omawiając go na przykładzie kilku implementacji tego języka. Okazało się, że o ile nowoczesne odmiany, takie jak SWI-Prolog radzą sobie na tym polu całkiem nieźle, o tyle starsze warianty, np. GNU Prolog, mają tu niestety pewne braki. A jak wygląda w Prologu kwestia testów jednostkowych? […]
Read MoreFunktory aplikatywne
W jednym z wcześniejszych wpisów zajmowaliśmy się funktorami. Wiemy już, że w Haskellu reprezentowane są one przez klasę typów Functor, dzięki której możemy aplikować funkcje do danych zapakowanych w różne kontenery. Dzisiaj porozmawiamy sobie o kolejnym istotnym pojęciu w świecie programowania funkcyjnego – o funktorach aplikatywnych. Najważniejsze różnice w stosunku do zwykłych funktorów można streścić […]
Read MorePółgrupy i monoidy w Haskellu
Tym czytelnikom, którzy np. na studiach mieli do czynienia z kursem algebry, być może obiły się gdzieś o uszy takie pojęcia jak grupa, półgrupa oraz monoid. Jeśli jesteś jedną z takich osób, to możliwe też, że nigdy nie wykorzystałeś(aś) tej wiedzy poza murami uczelni i nieco uleciała Ci ona z głowy. Nic dziwnego, tego typu […]
Read MoreJak czytać zagnieżdżone list comprehensions
Każdy kto programuje w Pythonie z pewnością szybko przekonał się do zalet tzw. list comprehensions. Ten sposób tworzenia list jest nie tylko zgodny z filozofią języka, ale przede wszystkim zgrabny, krótki i czytelny. Czasami jednak zdarza się spotkać konstrukcje, które na pierwszy rzut oka wcale takie czytelne nie są. Przykładem niech będzie fragment, na który natknąłem […]
Read MoreFunktory w Haskellu
Jak możemy przeczytać w artykule Brenta Yorgeya opublikowanym w magazynie The Monad.Reader, „funktor to najbardziej podstawowa i wszechobecna klasa w Haskellu„. [1] Często okazuje się jednak, że zrozumienie koncepcji funktorów i związanych z nimi zawiłości nie jest takie proste dla osób, wkraczających w świat programowania funkcyjnego. O ile elementy języka, które zazwyczaj poznaje się wcześniej […]
Read MoreModularyzacja w Prologu
Modularyzacja to coś oczywistego z perspektywy współczesnych języków programowania. Wiadomo przecież, że wrzucanie całego kodu to jednego pliku to coś, co sprawdza się jedynie na etapie programistycznej piaskownicy lub naprawdę niewielkich skrypcików. Dla wielu osób zaskoczeniem może być więc fakt, że nie wszystkie implementacje Prologa w ogóle wspierają modularyzację. Wynika to z prostego powodu – […]
Read MorePattern matching w Pythonie
W dniu dzisiejszym ukazała się kolejna (szósta już) wersja alpha Pythona 3.10, wprowadzając tym samym dość przełomową dla tego języka funkcjonalność – dopasowywanie wzorca (ang. pattern matching). Specyfikacja tej funkcjonalności zawarta jest w PEP 634, zaś dokumenty PEP 635 oraz PEP 636 zawierają odpowiednio uzasadnienie dokonanych zmian oraz tutorial dla programistów. W tym wpisie przyjrzymy […]
Read MoreKlasy typów w Haskellu
Haskellowe klasy typów można porównać do znanych z języków obiektowych interfejsów. Definiują one funkcje, które powinny zostać zaimplementowane dla korzystających z nich typów. Przykład na start Zastanówmy się nad dostępnym w języku C# interfejsem IEquatable, pozwalającym na porównywanie implementujących go obiektów.
Read More