Programowanie w CLIPS

Podobne dokumenty
Programowanie w CLIPS

Systemy ekspertowe. Wykład 5 Wprowadzenie do CLIPSa Programowanie systemów ekspertowych. Joanna Kołodziejczyk

Inżynieria wiedzy. Katedra Wytrzymałości Materiałów i Metod Komputerowych Mechaniki 1. Podstawy programowania w języku CLIPS

JESS FAKTY, REGUŁY. czyli faktami. Rodzaje faktów, oraz sposoby ich implementacji w programie. Szablony do tworzenia faktów.

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Kontrola przepływu wykonywania -pętle (foreach, if, while ). Tworzenie własnych funkcji przy pomocy polecenia deffunction( ).

Wprowadzenie do programowania w VBA

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Procedury i funkcje. Programowanie komputerowe

Programowanie obiektowe

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Metody i analiza danych

ŁAŃCUCHY W JĘZYKU C/C++

Wprowadzenie do Pakietu R dla kierunku Zootechnika. Dr Magda Mielczarek Katedra Genetyki Uniwersytet Przyrodniczy we Wrocławiu

Instalacja Pakietu R

Podstawowe części projektu w Javie

Program pyta na początku o liczbę wartości do wyrównania:

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Powłoka bash. Kurs systemu Unix 1

Właściwości i metody obiektu Comment Właściwości

Algorytmika i Programowanie VBA 1 - podstawy

Języki formalne i automaty Ćwiczenia 6

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego.

Podstawy programowania w Pythonie

Algorytmy i struktury danych

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

Podstawy bioinformatyki 2017/18

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Rys. 1 Budowa systemu ekspertowego

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Zajęcia 5 łańcuchy znaków (ciąg dalszy) i funkcje

PARADYGMATY PROGRAMOWANIA Wykład 3

OBLICZENIA NA DANYCH

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

AWK. Plan wykładu. Wprowadzenie. Najprostszy program

Podstawy Programowania

Programowanie deklaratywne

SED - Stream EDitor. edytor strumieniowy. Bogumił Konopka W-11/I-21 Politechnika Wrocławska

Język ludzki kod maszynowy

ZMIENNE. Podstawy PHP

Pakiety Matematyczne - R Zestaw 2.

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Inżynieria wiedzy. Katedra Wytrzymałości Materiałów i Metod Komputerowych Mechaniki

Bloki anonimowe w PL/SQL

Definicje. Algorytm to:

Oracle PL/SQL. Paweł Rajba.

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Programowanie deklaratywne

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Programowanie Delphi obliczenia, schematy blokowe

J.NAWROCKI, M. ANTCZAK, W. FROHMBERG, K. KOLANOWSKI, J. POCHMARA, S. WĄSIK, T. ŻOK AWK - WPROWADZENIE

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

PL/SQL. Zaawansowane tematy PL/SQL

Wizualizacja danych 2D i 3D - Gnuplot

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Funkcje są prawdopodobnie najważniejszą częścią każdego poważnego programu (w każdym języku programowania).

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Pakiety Matematyczne - R Zestaw 1.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

System operacyjny Linux

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Edytor wzorów w OpenOffice Mini podręcznik

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Administracja i programowanie pod Microsoft SQL Server 2000

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Krótki kurs JavaScript

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Podstawy programowania

dr inż. Jarosław Forenc

Wykład 5. SQL praca z tabelami 2

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Bazy danych. Polecenia SQL

Systemy GIS Tworzenie zapytań w bazach danych

Analiza Matematyczna MAEW101 MAP1067

Język Python (2) Język Python (2) 1/36

MATLAB tworzenie własnych funkcji

LibreOffice Calc VBA

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

RBD Relacyjne Bazy Danych

Mathematica III Równania różniczkowe, układy równań różniczkowych, wykresy, badanie funkcji, importowanie danych, instrukcje warunkowe, pętle

GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej.

2. Łańcuchy tekstowe w PHP

Oracle11g: Wprowadzenie do SQL

Odczyt danych z klawiatury Operatory w Javie

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Deklaracja i definicja metod, zwracanie wartości z metod, przekazywania parametrów do metod

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Rys.2.1. Drzewo modelu DOM [1]

Instalacja MySQL.

Algebra Boole a. Ćwiczenie Sprawdź, czy algebra zbiorów jestrównież algebrą Boole a. Padaj wszystkie elementy takiej realizacji.

Ref. 7 - Język SQL - polecenia DDL i DML

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Programowanie w Ruby

Transkrypt:

Programowanie w CLIPS

Wiedza początkowa Reguły oraz fakty początkowe dodane na początku programu za pomocą deffacts. (deffacts people "Znajomi" (person (name "Adam Kowalski") (age 24) (eye-color blue) (hair-color black)) (person (name "Jan Kowalski") (age 24) (eye-color blue) (hair-color black)) (person (name "Katarzyna Nowak") (age 36) (eye-color green) (hair-color red))) Uwaga: polecenie (reset) powoduje wyczyszczenie istniejących faktów i ponowne dodanie faktów początkowych (deffacts)

Odczyt z terminala Polecenia: bind, read, readline (defrule regula1 (initial-fact) => (printout t Jak masz na imie? ) (bind?imie (read)) (assert (imie?imie))?imie zmienna lokalna reguły

Odczyt z terminala read odczyt jednego pola readline odczyt wielu pól bind załadowanie do zmiennej

(defrule regula1 (initial-fact) => (printout t Jak masz na imie? ) (bind?imie (read)) (assert (imie?imie)) (defrule regula2 (imie?imie) => (printout t Witaj,?imie! crlf crlf) (printout t Wybierz opcje: (a/b/c) crlf) (printout t a) crlf) (printout t b) crlf) (printout t c) crlf) (bind?odp (read)) (assert (odp?odp)) )

(defrule regula_a (odp a) => (printout t Wybrales odpowiedz a crlf)) (defrule regula_b (odp b) => (printout t Wybrales odpowiedz b crlf)) (defrule regula_c (odp c) => (printout t Wybrales odpowiedz c crlf))

Odczyt z terminala Polecenie: readline oraz assert-string (defrule regula1 (initial-fact) => (printout t Podaj kilka wyrazów oddzielonych spacjami: crlf) (bind?string (readline)) (assert (napis?string)) (assert-string?string)) assert-string tworzy fakt złożony z wielu symboli na podstawie ciągu znaków oddzielonych spacjami

Odczyt z terminala Polecenie: readline oraz assert-string CLIPS> (reset) CLIPS> (run) Podaj kilka wyrazów odzielonych spacjami: Ala ma kota CLIPS> (facts) f-0 (initial-fact) f-1 (napis Ala ma kota ) f-2 (Ala ma kota) Fakt f-2 został dodany przez assert-string.

Zmienne Jednopolowe:?x?y?ilosc?nazwa Wielopolowe: $?napis $?ciag_liczb $?lista (defrule zmienne (x $?x) => (printout t?x =?x crlf) (printout t?x = $?x crlf)) CLIPS> (deffacts zmienna (x 15 20 14.8)) CLIPS> (reset) CLIPS> (run)?x = (15 20 14.8) $?x = (15 20 14.8) Uwaga: W LHS symbol $ jest istotny, w RHS nie.

Zmienne wielopolowe - funkcje (create$ ) - tworzy jedną wartość wielopolową łącząc dowolną ilość pól: CLIPS> (create$ a ab abcd) (a ab abcd) CLIPS> (create$ (+ 2 3) (* 2 3) (- 8 6)) (5 6 2) (nth$ ) - wybiera z wartości wielopolowej jedno pole: CLIPS> (nth$ 3 (create$ 10 21 23 44)) 23 CLIPS> (nth$ 2 (create$ Ala ma kota)) ma

Zmienne wielopolowe - funkcje (member$ ) - wskazuje, czy dany element znajduje się w wartości wielopolowej i określa jego położenie: CLIPS> (member$ ab (create$ a ab abcd)) 2 CLIPS> (member$ 7 (create$ (+ 2 3) (* 2 3) (- 8 6))) FALSE (delete$ ) - usuwa podzbiór: CLIPS> (delete$ (create$ 22 3 4 23 44) 2 3) (22 23 44)

Zmienne wielopolowe - funkcje (insert$ ) - wstawia do wartości wielopolowej na zadane miejsce: CLIPS> (insert$ (create$ a ab abcd) 2 xy) (a xy ab abcd) Pozostałe: (length$ ) (replace$ ) (first$ )

Operacje arytmetyczne +, -, *, /, ** (potęgowanie): np. (+?x?y?z) :?x +?y +?z (-?x?y?z) :?x -?y -?z (+ (-?x?y) (*?x 2)) : (?x -?y) + (?x * 2) (- (+?x (*?y?z)) (/?x?z)) : (?x +?y *?z) -?x /?z

Funkcje matematyczne (cos?x) (sin?x) itd... (abs?x) (exp?x) (log?x) (sqrt?x) itd...

(defrule start (initial-fact) => (printout t Program oblicza pierwiastki r. kwadratowego: crlf) (printout t Podaj a : ) (bind?a (read)) (printout t Podaj b : ) (bind?b (read)) (printout t Podaj c : ) (bind?c (read)) (assert (a?a) (b?b) (c?c))) (defrule licz-delte (a?a) (b?b) (c?c) => (bind?delta (- (*?b?b) (* 4?a?c))) (assert (delta?delta)))

(defrule licz-pierwiastki_delta_zero (delta?delta) (a?a) (b?b) (test (=?delta 0)) => (bind?x1 (/ (- 0?b) (* 2?a))) (bind?x2?x1) (assert (x1?x1) (x2?x2))) (defrule licz-pierwiastki_deltawiekszaodzera itd. (defrule pisz-wynik (x1?x1) (x2?x2) => (printout t X1 =?x1,x2 =?x2 crlf) )

Funkcja test (test (funkcja_porównująca argumenty)) - porównuje liczby, łańcuchy, zmienne Zawsze po lewej stronie reguły (LHS)! Reguła, która ma po lewej stronie funkcję (test...), zostanie uaktywniona tylko, gdy będzie spełniony warunek w tej funkcji (oraz inne fakty w LHS). Funkcje porównujące: =, <>, >=, >, <=, < Można używać funkcji logicznych (and, or ) Np. (test (>?delta 0)) (test (<> wynik -1))

Funkcje definiowane przez użytkownika Składnia: (deffunction nazwa_funkcji (?arg1?arg2?argn) (akcja1) (akcja2) (akcjam)) ;TYLKO OSTATNIA AKCJA ZWRACA WARTOŚĆ!

Funkcje definiowane przez użytkownika Składnia: (deffunction ostatnia-akcja (?a?b) ;argumenty (printout t Wartości wejściowe:?a?b crlf) (+?a?b) (-?a?b) (*?a?b)) CLIPS> (ostatnia-akcja 4 2) Wartości wejściowe: 4 2 8 CLIPS>

Operacje na łańcuchach znaków (assert-string ) - (omówiona wcześniej) tworzy fakt wielopolowy z łańcucha (str-cat ) - łączy w jeden łańcuch pojedyncze elementy: CLIPS> (str-cat raz dwa trzy) razdwatrzy (str-index ) - zwraca pozycję podanego ciągu znaków w łańcuchu: CLIPS> (str-index abc abcdef ) 1 CLIPS> (str-index xyz abcdef ) FALSE

Operacje na łańcuchach znaków (sub-string ) - zwraca podłańcuch: CLIPS> (sub-string 2 4 abcdef ) bcd Inne: (str-compare ) (str-length ) (upcase ) (lowcase...)

Zmienne globalne Wszystkie zmienne, których do tej pory używaliśmy były zmiennymi lokalnymi poszczególnych reguł. Zmienna lokalna jest znana tylko w regule, w której jest zdefiniowana. Zmienne globalne mają zakres całego programu są znane we wszystkich regułach.

Zmienne globalne Uwaga!: Wszędzie tam gdzie to możliwe należy używać faktów, a nie zmienny globalnych!

Zmienne globalne Definicja: (defglobal?*zmienna1* = wartość1?*zmienna2* = wartość2 )

Zmienne globalne np. CLIPS> (defglobal?*a* = 1) CLIPS>?*a* 1 CLIPS> (bind?*a* 5) CLIPS>?*a* 5 CLIPS> (reset) CLIPS>?*a* 1

Zmienne globalne Użycie w regułach: ŹLE!: (defrule zla-regula (y?*x*) => ) OK: (defrule regula-ok (y?y) (test (=?y?*x*) =>...)

Śledzenie wykonania programu (run 5) spowoduje uruchomienie 5 reguł i zatrzymanie programu (step) [to samo co (run 1)] (set-break nazwa_reguły) zatrzyma wykonanie programu przed regułą (remove-break nazwa_reguły) usuwa punkt stopu (show-breaks)