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

Przetwarzanie dużych JSONów w Pythonie

Jak w Pythonie odczytać dane z pliku w formacie JSON? Użyć modułu json! – odpowie zapewne spora część pythonistów. I chociaż bardzo często odpowiedź taka jest wystarczająca, niekiedy na horyzoncie pojawiają się problemy, w których zdecydowanie lepiej skorzystać z innych rozwiązań. Jednym z nich jest ijson, czyli iteratywny (ang. iterative) parser plików JSON. Na czym polega […]

Read More

DSL vs DSML: czym są języki dziedzinowe i języki modelowania dziedzinowego?

Z pojęciem języków dziedzinowych (ang. DSL – Domain-Specific Languages) spotkałem się już dość dawno i znaczenie tego pojęcia było dla mnie w miarę zrozumiałe. Chodzi po prostu o języki zaprojektowane do użycia w konkretnych dziedzinach i dostosowane do nich swoją składnią oraz semantyką. Kiedy jednak pewnego razu natknąłem się na skrót DSML, rozwijany jako Domain-Specific Modeling Languages (języki […]

Read More

Guietta – sposób na proste GUI w Pythonie

W swoim programistycznym życiu napisałem przy użyciu frameworka Qt tysiące linii kodu. Przygodę z nim zacząłem od jego naturalnego środowiska, jakim jest język C++. Później zaś, gdy przerzuciłem się na Pythona, miałem okazję stworzyć całkiem sporo aplikacji, wykorzystując do tego PyQt. Używając zwrotu „napisałem w Qt” mam na myśli nie tylko posługiwanie się najróżniejszymi klasami, […]

Read More

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

Poza łacińskim kręgiem kulturowym

Programowanie to dziedzina na wskroś przesiąknięta językiem angielskim. Nazwy słów kluczowych, funkcji wbudowanych i wszelkich bytów definiowanych przez użytkownika zazwyczaj zapisuje się właśnie w tym języku. Niektórzy żartują, że porządnie napisany kod powinno czytać się tak jak dobrą książkę. I chyba wszyscy wiemy, że chodzi o książkę właśnie po angielsku. Oczywiście tu również zdarzają się […]

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