U5 Flashcards
Jakie są operatory porównania w języku prolog
OPERATORY :
operand - duza literka X,Y,Z przekazywana w predykacie
operand lewostronny - operand po lewej stronnie,
vice versa dla operanda prawostronnego
X is Y - X M U S I byc operandem ,operand prawostronny może być
czymś innym, np wyrażeniem arytematycznym
X =:= Y - wartosci arytmetyczne wyrazen X i Y sa takie same
X == Y - wartosci arytmetyczne wyrazen X i Y sa rozne
X == Y - termy X i Y sa identyczne, maja identyczna strukture i identyczne
argumenty z dokladnoscia do nazwy, np. X==Y jest zawsze nieprawda
X == Y —termy X i Y nie sa identyczne
Za co odpowiada operator =
Operator = porównuje operandy. Jeśli obie są termami stałymi, zwraca logiczny wyniki porównania. Jeśli jeden operand lub oba operandy są zmiennymi, wtedy wynik jest zawszę prawdą, z efektem ubocznym przypisania zmiennej stałego operandu. Gdy oba operandy były zmiennymi, to pozostają nimi, ale są zunifikowane, czyli muszą mieć równą wartość w przyszłości.
Czym są reguły w języku Prolog?
Reguły w języku Prolog to konstrukcje logiczne, które określają zależności między różnymi faktami i predykatami. Składają się z nagłówka (celu) i ciała, gdzie ciało zawiera warunki, które muszą być spełnione, aby nagłówek był prawdziwy. Reguły są zapisane w postaci klauzul Horn’a, na przykład: nagłówek :- warunek1, warunek2.. Są one podstawą wnioskowania w Prologu, pozwalając na definiowanie bardziej złożonych relacji niż proste fakty. Dzięki regułom, Prolog może wykonywać rekurencyjne zapytania i rozwiązywać problemy poprzez proces dowodzenia.
W jaki sposob Prolog znajduje odpowiedzi na pytania?
Prolog szuka odpowiedzi na pytania w bazie danych:
- Jeżeli pytanie dopasuje się do faktu prostego odpowiedź następuje odrazu.
- Jeżeli fakt jest regułą to Prolog próbuje dopasować pytanie do lewej strony reguły, jeżeli się uda Prolog wywołuję się rekurencyjnie, aby udowodni fakty po prawej stronie reguły.
Sukces wywołania rekurencyjnego oznacza pozytywną odpowiedź na pytanie.
Czym jest język Prolog?
Prolog to język programowania logicznego, używany głównie w sztucznej inteligencji i lingwistyce komputerowej. Opiera się na deklaratywnym podejściu, gdzie programista definiuje fakty i reguły, a program sam wnioskuje rozwiązania. Jego składnia i semantyka są oparte na rachunku predykatów pierwszego rzędu. W Prologu, zapytania są zadawane w celu sprawdzenia, czy dane fakty i reguły mogą być spełnione, co czyni go szczególnie użytecznym w problemach związanych z logiką i przeszukiwaniem przestrzeni stanów. Jest ceniony za zdolność do rozwiązywania problemów przez wnioskowanie i rekurencję.
Co to klauzula Horn’a
Klauzula Horn’a w kontekście Prologu to specjalna forma klauzuli logicznej, która jest używana do reprezentowania faktów i reguł. Składa się z co najwyżej jednego literału dodatniego (konkluzji) i dowolnej liczby literałów ujemnych (przesłanek). Klauzula Horn’a ma postać:
Fakt: P. (gdzie P jest literałem dodatnim)
Reguła: P :- Q1, Q2, …, Qn. (gdzie P jest literałem dodatnim, a Q1, Q2, …, Qn są literałami, które mogą być zarówno dodatnie, jak i ujemne)
Dzięki tej strukturze, klauzule Horn’a są prostsze do przetwarzania przez algorytmy wnioskowania, co czyni je efektywnym narzędziem w języku Prolog.
Spojniki logiczne w Prolog
ALTERNATYWY uzywamy za pomoca “;”
KONIUNKCJI uzywamy za pomoca “,”
Jak tworzymy listę w Prologu?
Listę w Prologu tworzymy za pomocą nawiasów kwadratowych [ ].
Listę można zapisać za pomocą określenia głowy i reszty w postaci [Head|Rest], podobnie do języka Huskell
Do czego używa się operatora odciecia?
Odciecia uzywa sie do :
- oznaczenia momentu wyjsciowego z funkcji
- error handlingu
- zatrzymania nawracania
Jak wyglada operator odciecia
!
przykładowo fakt(a) :- !.
Jakie operacje można wykonać na termach w Prologu?
var(term) - sprawdza, czy term jest zmienną.
nonvar(term) - odwrotnie niż var.
atom(term) - sprawdza, czy term jest atomem.
integer(term) - sprawdza, czy term jest liczbą całkowitą.
atomic(term) - sprawdza, czy term jest atomem lub liczbą.
clause - zwraca klauzulę z bazy danych.
functor - zwraca funktor termu.
arg - zwraca argumenty termu.
=.. - zamienia term na listę.
Jakie predykaty umożliwiają dynamiczne modyfikowanie bazy danych w Prologu?
asserta(term) - dodaje term na początek bazy danych.
assertz(term) - dodaje term na koniec bazy danych.
retract(term) - usuwa term z bazy danych.
Operacje te pozwalają na dynamiczne modyfikowanie bazy wiedzy w Prologu.
Jakie są podstawowe operacje wejścia/wyjścia w Prologu?
Wczytywanie i wypisywanie termów:
read(X) - wczytuje z terminala jeden term zakończony kropką . i podstawia go pod zmienną X.
write(X) - wypisuje na terminalu wartość termu podstawioną pod zmienną X.
see(‘stary’) - otwiera istniejący plik do zapisu.
seen - kończy czytanie z pliku i zamyka plik.
consult(plik1) - ładuje plik z aksjomatami.
reconsult(plik2) - ponownie ładuje plik z aksjomatami.
nl - wypisuje znak nowej linii na terminalu.
Wczytywanie i wypisywanie znaków:
get(X) - czyta znak (w postaci numerycznego kodu znaku).
put(X) - pisze jeden znak, np. put(104) wypisuje znak h.
Operacje na plikach:
tell(‘nowy’) - otwiera nowy plik o nazwie ‘nowy’ i przełącza standardowe wyjście na ten plik.
told - zamyka plik aktualnie otwarty i przełącza standardowe wyjście na terminal.