Testy jednostkowe w Prologu

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 More

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

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

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

Algebraiczne typy danych i haskellowe rekordy

Kiedy w językach obiektowych potrzebujemy struktury, opisującej jakieś dane, tworzymy po prostu klasę. W Haskellu mamy zaś… algebraiczne typy danych. Ale dlaczego algebraiczne? Czy kryje się tutaj jakaś czyhająca na nas komplikacja? Przyjrzyjmy się tej sprawie i rozwikłajmy zagadkę haskellowych ADT (ang. Algebraic Data Types). Dlaczego algebraiczne? Mając do dyspozycji garść podstawowych typów danych, takich […]

Read More