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 MoreKategoria: Programowanie logiczne
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 MoreDynamiczne 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 MoreRelacje 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 MoreRelacje symetryczne w Prologu
Jeśli potrzebujemy zdefiniować jakąś relację (dajmy na to małżeństwo) jako symetryczną, to posługując się językiem logiki matematycznej możemy ją zapisać mniej więcej tak:
Read MoreDeklaratywne 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