Funktory 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 More

Pół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 More

Jak 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 More

Funktory 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 More

Modularyzacja 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 More

Pattern 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 More

Dynamiczne modyfikowanie prologowej bazy wiedzy

Proces tworzenia prostych prologowych aplikacji przebiega zazwyczaj podobnie. Zaczynamy od stworzenia bazy wiedzy, definiujemy niezbędne predykaty (niekiedy również w tym samym pliku), a następnie odpalamy interpreter i pytamy o fakty oraz łączące je relacje. Czy oznacza to, że zdefiniowana na samym początku baza jest czymś niemodyfikowalnym z punktu widzenia programu? Czy możemy zmieniać fakty przy […]

Read More