logo

Programy prologowe

Używanie wbudowanych predykatów, kolejność celów lub określanie celu w wierszu poleceń systemu miałoby samo w sobie niewielką wartość. Aby napisać program Prolog, użytkownik musi najpierw napisać program napisany w języku Prolog, załadować ten program, a następnie w wierszu zachęty określić sekwencję jednego lub więcej celów.

Aby utworzyć program w Prologu, najprostszym sposobem jest wpisanie go do edytora tekstu, a następnie zapisanie go jako plik tekstowy, np. prolog1.pl .

Poniższy przykład pokazuje prosty program Prologu. Program zawiera trzy komponenty zwane klauzulami. Każde zdanie kończy się kropką.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Korzystanie z wbudowanego predykatu ' konsultować' , powyższy program można załadować w systemie Prolog.

?-consult('prolog1.pl').

To pokazuje, że plik prolog1.pl istnieje, a program prolog jest poprawny systemowo, co oznacza, że ​​zawiera prawidłowe klauzule, cel zostanie osiągnięty i aby potwierdzić, że program został poprawnie odczytany, wyświetli jeden lub więcej wierszy wyniku. np.,

?-
# 0,00 sekundy na konsultację prolog1.pl
?-

iteruj mapę Java

Alternatywą dla „skonsultuj” jest „Wczytaj”, które będzie dostępne w opcji menu, jeśli system Prolog posiada graficzny interfejs użytkownika.

Po załadowaniu programu klauzula zostanie umieszczona w obszarze przechowywania, który jest nazywany bazą danych Prologu. W odpowiedzi na monit systemu podaj sekwencję celów, a Prolog wyszuka i użyje klauzul niezbędnych do oceny celów.

Terminologia

W poniższym programie trzy linie pokazują klauzule.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Użycie kropki powoduje wygaśnięcie każdej klauzuli. Programy Prologu mają sekwencję klauzul. Klauzule te opisują fakty lub zasady.

Przykład fakty Jest pies (rottweiler) I kot (munchkin) . Mają na myśli to rottweilera jest psem” i „ munchkin to kot'.

Pies nazywany jest orzeczeniem. Pies zawiera jeden argument. Słowo ' rottweiler ujęte w nawiasie ( ). Rottweiler nazywany jest atomem.

Przykładem reguły jest ostatnia linia programu.

 animal(A) :- dog(A). 

Znak dwukropka(:-) będzie odczytywany jako „jeśli”. Tutaj A jest zmienną i reprezentuje dowolną wartość. W naturalny sposób regułę tę można odczytać w następujący sposób: „Jeśli A jest zwierzęciem, to A jest psem”.

Z powyższego punktu wynika, że rottweilera jest zwierzęciem. Takiej dedukcji może dokonać także Prolog:

?- zwierzę(rottweiler).
Tak

Aby to sugerować munchkin jest zwierzęciem, nie ma na to dowodów.

? - zwierzę(munchkin).
NIE

Więcej terminologii

Ocena warunku celu określa, czy jest on spełniony, czy nie. Oznacza to również, że cel ma wartość true lub false.

Należy pamiętać, że gdy użytkownik wprowadza cel, czasami można go zinterpretować jako polecenie. Na przykład,

?- zatrzymaj się. 'Służy do wyjścia z systemu Prolog.'

Czasami można to potraktować jako pytanie typu:

?- zwierzę(rottweiler). & „Czy rottweiler jest zwierzęciem?”

Poniższy program pokazuje kolejny przykład dotyczący zwierząt. Zawiera osiem klauzul. Komentarz jest wyświetlany jako cały tekst pomiędzy /* i */.

 /* Another Program of Animal */ Dog(rottweiler). cat(sphynx). dog(poodle). dog(bulldog). cat(bengal). dog(dobermann). cat(himalayan). cat(singapura). /* This Prolog program consists of various clauses. It is always terminated using the full stop.*/ 

Zarówno predykat pies, jak i predykat kot mają cztery klauzule. Załóżmy, że w pliku tekstowym „animal.pl” program został zapisany, a wyjście jest generowane poprzez załadowanie programu i w wierszu poleceń systemu wpisujemy sekwencję celów w następujący sposób:

?- konsultuj('animals1.pl'). Monit systemowy
# 0,01 sekundy na konsultację zwierzęta.pl zwierzęta.pl ładowane za pomocą konsultacji

?- pies(rottweiler).
Tak

? - pies (bokser).
NIE

?- pies(A).
A = rottweiler pauzuje – użytkownik wciska klawisz Return

?- pies(B).
B = rottweiler; pauzy? naciski użytkownika ;
B = pudel; pauzy? naciski użytkownika ;
B = buldog; pauzy? naciski użytkownika ;
B = dobermann Bez pauzy? Przejdzie do następnej linii

?- kot(A). A = sfinks; pauza? prasy użytkownika;
A = Bengal pauzuje? użytkownik naciska klawisz Return

?- słucham (pies). Wyświetli listę wszystkich klauzul definiujących predykat psa

/* pies/1 */

pies (rottweiler).
pies (pudel).
pies (buldog).
pies (doberman).
Tak
?-

W tym przykładzie przedstawiono różne nowe funkcje Prologu. Zapytanie jest następujące:

?- pies(A).

Oznacza to, że znajdź wartość A i będzie to imię psa. Odpowiedź Prologu jest następująca:

A = rottweiler

Inne możliwe odpowiedzi A to: pudel, buldog, dobermann. Spowoduje to pauzę Prologu i z tego powodu musimy poczekać, aż użytkownik naciśnie klawisz „return”, zanim wyświetli monit systemowy ?-.

Kolejne zapytanie możemy wprowadzić w następujący sposób:

?- pies(B).

To zapytanie jest takie samo jak poprzednio. Powyższe zapytanie oznacza, że ​​„znajdź wartość B, a będzie to imię psa”. Odpowiedź Prologu jest następująca:

B = rottweiler

zmiana nazwy katalogu w systemie Linux

Prolog ponownie się zatrzyma. Tym razem użytkownik naciśnie klawisz średnika (;). Teraz Prolog znajdzie alternatywną wartość B, która spełnia psa docelowego (B). Odpowiedź będzie następująca:

B = pudel

Prolog ponownie się zatrzyma. Użytkownik ponownie naciska klawisz średnika (;). Prolog tworzy dalsze rozwiązanie w następujący sposób:

B = buldog

Prolog ponownie się zatrzyma. Użytkownik ponownie naciska klawisz średnika (;). Prolog tworzy dalsze rozwiązanie w następujący sposób:

B = doberman

Prolog rozpoznaje, że nie ma już dostępnego rozwiązania, nie zatrzymując się, ale wyświetlając monit systemowy ?- przechodząc od razu do wyjścia.

W tym przykładzie wprowadzono nowy wbudowany predykat. Określenie celu

?- wpis (pies)

W powyższym celu Prolog wylistuje wszystkie cztery klauzule definiujące psa predykatu. Zdefiniują je w tej samej kolejności, w jakiej zostały załadowane do bazy danych.

Użycie zmiennych w zapytaniu ilustruje poniższy przykład. Kolejność bramek jest następująca:

?-kot(A),pies(B).

To da nam wszystkie możliwe kombinacje kota i psa.

?-kot(A),pies(B).
A = sfinks,
B = rottweiler;

Nowa linia Pythona

A = sfinks,
B = pudel;

A = sfinks,
B = buldog;

A = sfinks,
B = doberman;

itp.

Natomiast kolejność bramek jest następująca:

?-kot(A), pies(A).

Spowoduje to wyświetlenie wszystkich zwierząt, które są zarówno kotem, jak i psem (w bazie danych nie ma takiego zwierzęcia). Tutaj A jest „dowolną wartością” zarówno w przypadku kota (A), jak i psa (A), ale oba muszą mieć tę samą wartość.

?-kot(A),pies(A).
NIE