LISP - "LISt Processing"

Podobne dokumenty
Definicje wyższego poziomu

Elementy języka Scheme

Java EE produkcja oprogramowania

Paradygmaty programowania

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Elementy języka Scheme

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka.

Języki programowania zasady ich tworzenia

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Języki programowania deklaratywnego

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Języki programowania deklaratywnego

Podstawy programowania. Wprowadzenie

Metody Kompilacji Wykład 1 Wstęp

Języki i paradygmaty programowania. I. Wprowadzenie

Elementy języków programowania

Prolog (Pro-Logic) Programowanie w Logice. Dr inż. Piotr Urbanek

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Programowanie w języku Python. Grażyna Koba

Podstawy programowania skrót z wykładów:

Programowanie. Projektowanie funkcje programu tworzenie algorytmu i struktur danych. Programowanie implementacja algorytmu kompilacja programu

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Informatyczna Wieża Babel, czyli o różnych językach programowania. Informatyczna Wieża Babel, czyli o różnych językach programowania

Python dla początkujących. Małgorzata Niewiem AGH, GGiOŚ, Katedra Geoinformatyki i Informatyki Stosowanej SATIM Satelitarny Monitoring

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Technologie informacyjne - wykład 12 -

KARTA KURSU. Wstęp do programowania

Java jako język programowania

Algorytmy od problemu do wyniku

Mikrokontroler ATmega32. Język symboliczny

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

1 Podstawy c++ w pigułce.

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

JAVAScript w dokumentach HTML (1)

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

1 Podstawy c++ w pigułce.

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie deklaratywne

Podstawy programowania w Pythonie

ZMIENNE. Podstawy PHP

Cw.12 JAVAScript w dokumentach HTML

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Podstawy programowania w języku C

Programowanie komputerów

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Programowanie obiektowe - 1.

Programowanie w logice

Programowanie I. Wprowadzenie. Proces programowania

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

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

Wprowadzenie do Prologa

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Wykład 0 Informacje Podstawowe

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Redis, skrypty w języku Lua

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Języki Programowania. Elementy języków programowania. Wojciech Sobieski

Java Podstawy. Michał Bereta

Programowanie obiektowe

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wstęp do programowania

Programowanie C# mgr in. Dariusz Ku. p. 119A

Informatyka II stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

PODSTAWY SZTUCZNEJ INTELIGENCJI

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

Programowanie współbieżne i rozproszone

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Python wstęp do programowania dla użytkowników WCSS

Języki i metodyka programowania

Typy, klasy typów, składnie w funkcji

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Algorytmika i Programowanie VBA 1 - podstawy

Projekt 4: Programowanie w logice

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

ForPascal Interpreter języka Pascal

Analiza leksykalna i generator LEX

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Programowanie w języku C++ Podstawowe paradygmaty programowania

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Podstawy i języki programowania

4. Funkcje. Przykłady

Zapisywanie algorytmów w języku programowania

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Paradygmaty programowania

Transkrypt:

- "LISt Processing" dr inż. Tomasz Białaszewski Katedra Systemów Decyzyjnych Email: bialas@eti.pg.gda.pl http://www.eti.pg.gda.pl/katedry/ksd/pracownicy/tomasz.bialaszewski/ 1

Wprowadzenie Rodzaje języków programowania Programowanie Imperatywne Deklaratywne Funkcyjne Logiczne 2

Wprowadzenie Programowanie imperatywne: silnie związane z architekturą komputera (model von Neuman a) obliczenia w zakresie zmiany stanu programu sekwencja rozkazów do wykonania przez komputer np. FORTRAN, ALGOL, COBOL, BASIC, Pascal, C/C++, JAVA, PHP 3

Wprowadzenie Programowanie deklaratywne: co program powinien wykonad bez opisywania jak to ma zrobid związki z logiką matematyczną brak efektów ubocznych funkcyjne i logiczne programowanie 4

Wprowadzenie Programowanie logiczne: wnioskowanie logiczne jako deklaratywna reprezentacja języka programowania Prolog (PROgramowanie w LOGice) język programowania stosowany w problemach sztucznej inteligencji program wyrażony za pomocą termów, relacji reprezentowanych jako fakty i reguły 5

Wprowadzenie Programowanie funkcyjne: przeprowadzanie obliczeo na matematycznych funkcjach unikanie stanu i zmiennych programu rachunek lambda (rachunek-λ) - formalny system zaprojektowany do badao związanych z funkcjami matematycznymi i rekurencją 6

Wprowadzenie rachunek-λ (A. Church & S. C. Kleene, 1930): mocny i elegancki model obliczeo matematycznych Abstrakcyjny model obliczeo (kuzyn maszyny Turinga) pozbawiony stanu 7

Wprowadzenie (rachunek-λ) brak skutków ubocznych (stanu) brak zmiany wartości argumentów funkcji posiada trzy konstrukcje: definicja zadanie aplikacja dwa specjalne operatory symbol λ znak 8

Wprowadzenie (rachunek-λ) Definicja funkcji: λ x. Body Funkcja dla która pobiera pojedynczy argument, oblicza wyrażenie zawarte w ciele funkcji i zwraca wynik Przykład. Zdefiniowanie powójnej wartości x i dodanie liczby 3: λ x. 2*x+3 9

Wprowadzenie - LISt Processing (John McCarthy, 1958): rodzina języków programowania składnia języka zawarta w nawiasów drugi najstarszy język programowania Lista główna struktura danych kod programu reprezentowany przez listę 10

Wprowadzenie () praktyczny matematyczny opis programu w rachunku lambda język programowania stosowany w sztucznej inteligencji: struktury drzewiaste automatyczne zarządzanie pamięcią dynamiczne typowanie kompilacja własnego kodu źródłowego 11

Wprowadzenie () Kod programu -owego: struktura danych s-wyrażenie (lista otoczona nawiasami) lista z operatorem funkcji jako pierwszy element, zaś kolejne stanowią jej argumenty (f arg1 arg2 arg3) 12

Wprowadzenie () Pierwsza implementacja: Steve Russell (IBM 704) interpreter obliczanie wyrażeo -a Dwa podstawowe makra języka podstawowe operacje na listach: car (Contents of the Address part of Register number) cdr (Contents of the Decrement part of Register number) 13

Wprowadzenie () wyrażenie Register określa Memory Register ( Memory Location ) dialekty Lispu nadal używają operacji car i cdr (wymowa: /ˈkɑr/ i /ˈkʊdər/) rezultaty operacji: car zwraca pierwszy element listy (głowa) cdr zwraca resztę listy (ogon) 14

Wprowadzenie () Trudny do implementacji kompilator z zastosowaniem techniki lat 70 Procedury zwalniania pamięci (Daniel Edwards): praktyczna implementacja -a na komputerach ogólnego przeznaczenia problem efektywności Maszyny -u: dedykowany sprzęt do uruchamiania programów w środowisku 15

Wprowadzenie Maszyny -u pionierem w wprowadzaniu obecnych technologii: procedury zwalniania pamięci laserowe drukowanie okienkowe systemy mysz komputerowa procedury grafiki wysokiej rozdzielczości mechanizmy renderowania 16

Wprowadzenie Dialekty a odmiany podstawowego jądra języka: Scheme Common Lisp Clojure Zastosowania jako język skryptowy: Emacs Lisp w edytorze Emacs-a Visual Lisp w AutoCAD-zie Nyquist w Audacity 17

Wprowadzenie Common : następca MacLisp-a duży standard języka zawierający wiele wbudowanych typów danych, funkcji i makr zorientowany obiektowo (Common Object System, CLOS) zapożyczone funkcje ze Scheme-a: zakres leksykalny zamknięcia leksykalne 18

Wprowadzenie Clojure: dynamiczny dialekt -a uruchamiany na wirtualnej maszynie JAVY język skryptowy do programowania wielowątkowego uruchamiany przez interpreter lub kompilowany do kodu bajtowego pełna integracja z językiem JAVA 19

Wprowadzenie Scheme (1975, Gerald Sussman & Guy Steele Jr.) Pierwszy dialekt a zawierający: zakres leksykalny procedury klasy pierwszej kontynuacje Pierwsza forma języka - przeznaczona do badao naukowych i dydaktyki Wspieranie tylko kilku zdefiniowanych form składniowych języka oraz procedur 20

Wprowadzenie (Scheme) Pierwsze implementacje oparte na interpreterze bardzo wolne Obecne kompilatory Scheme-a generują kod na równi z kodem dla języka C i Fortran Impementacyjne cechy: rekurencja ogonowa pełna kontynuacja (niekoniecznie występuje Common ie) 21

Wprowadzenie (Scheme) Jasna i prosta semantyka Kilka różnych sposobów zapisywania wyrażeo Szeroki wybór modeli programowania: imperatywny funkcyjny style przekazywania komunikatów 22

Wprowadzenie (Scheme) Interpreter szczególnie popularny w językach skryptowych: SIOD oraz TinyScheme w GIMPie ( Script-fu ) LIBREP (na podstawie Emacs Lisp) w menadżerze Sawfish Interpreter Guile zastosowany w GnuCash 23

Składnia Scheme-a Program w języku Scheme może zawierad: słowa kluczowe zmienne formy struktury stałe (liczby, znaki, łaocuchy, cytaty wektorów, list lub symboli itp.) znaki spacji komentarze 24

Składnia Scheme-a Identyfikatory (słowa kluczowe, etykiety, zmienne, i symbole) konstruowane ze zbioru: małych liter od a do z dużych liter od A do Z cyfry od 0 do 9 znaków?!.+-*/<=>:$%^&_~@ 25

Składnia Scheme-a Identyfikatory nie mogą zaczynad się od: @ jakiegokolwiek znaku zaczynającego liczbę tzn.: cyfra znak ( + ) znak ( - ) kropka (. ) Wyjątek: +, -,..., są identyfikatorami Np: hi, Hello, x, x3,?$&*!!! 26

Składnia Scheme-a Identyfikatory muszą byd ograniczone: znakiem spacji nawiasami znakiem podwójnego cytatu ( " ) znakiem komentarza ( ; ) Uwaga: wszystkie implementacje muszą rozpoznawad dowolny ciąg identyfikatorów zgodnie z powyższymi regułami 27

Składnia Scheme-a Brak ograniczeo na długośd identyfikatora Identyfikatory mogą byd zapisane w dowolnej kombinacji małych i dużych liter Wielkośd nie jest ważna Dwa identyfikatory różniące się wielkością liter są identyczne Przykładowo: abcde, Abcde, AbCdE, ABCDE są tymi samymi identyfikatorami 28

Składnia Scheme-a System drukuje identyfikatory zwykle albo z małych albo z wielkich liter niezależnie od charakteru wprowadzanych znaków Struktury danych są zamknięte okrągłymi nawiasami, np. : (a b c) (* (- x 2) y) Pusta lista () 29

Składnia Scheme-a Niektóre implementacje pozwalają na stosowanie nawiasów kwadratowych []w miejsce okrągłych w celu polepszenia czytelności kodu Wartości logiczne reprezentowane przez identyfikatory #t and #f Wyrażenia warunkowe Scheme-a #f traktowane jako fałsz Wszystkie inne obiekty są prawdą np.: 3, (), "false", oraz nil przyjmują wartośd prawdy 30

Składnia Scheme-a Wektory - #(a vector of symbols) Łaocuchy - "This is a string" Znaki rozpoczynające się przez #\, np., #\a Wielkośd ma znaczenie dla znaków i łaocuchów, w odróżnieniu od identyfikatorów Liczby: - 12, 1/2, 1.4, 1e2456, 1.3777-2.7i, -1.2@73 31

Składnia Scheme-a Wyrażenia mogą rozciąga się na kilka linii brak wymaganego znaku kooczącego Liczba białych znaków (spacji) oraz kooca linii nie jest znacząca Programy są zwykle wcięte, aby pokazad w sposób czytelny struktury kodu 32

Składnia Scheme-a Komentarze: pomiędzy znakiem ( ; ) koocem linii umieszczane na tym samym poziomie wcięcia co wyrażenie wyjaśnianie procedur umieszczane przed nimi bez wcięcia Przykładowo: ;;; The following procedures 33

Konwencje w nazewnictwie Nazwy predykatów zakooczone znakiem (? ) Przykładowo: eq?, zero?, and string? Typy predykatów tworzone z ich nazw Nazwy procedur rozpoczynające się do prefiksu char-, string-, vector-, listnp. : string-append 34

Interakcja Scheme-a System interakcji oparty na zasadzie wczytaj-wyznacz-wydrukuj ( read-evaluate-print, REPL) System interakcji Scheme-a: czyta każde wyrażenie wprowadzone z klawiatury, ocenia je a następnie drukuje jego wartośd 35

Proste wyrażenia Liczby są stałymi: 12345678784978 12345678784978 3/4 3/4 3.141592653 3.141592653 2.2+1.1i 2.2+1.1i 7/2 3½ 1.14e-10 1.14e-010 36

Proste wyrażenia Procedury arytmetyczne +, -, *, / (+ 1/2 1.2 3/4) 2.45 (- 1/2 5/6 3/4) -111/12 (* 3-2/3 5/4) -21/2 (/ 3-2.5 5/4) -0.96 Scheme stosuje notację prefiksową (procedure arg1 arg2 argn) 37

Proste wyrażenia Zagnieżdżone procedury (+(+ 2 2)(+ 2 2)) 8 (- 2 (* 4 1/3)) 2/3 (* 2 (* 2 (* 2 (* 2 2)))) 32 (/(* 6/7 7/2)(- 4.5 1.5)) 1.0 38

Proste wyrażenia Lista: Podstawowa struktura danych Sekwencja obiektów otoczona ( ) np.: (1 2 3 4 5) ;lista liczb ("a" "list") (4.2 "hi") ;lista ;lista łańcuchów ((1 2) (3 4)) ;zagnieżdżona lista 39

Proste wyrażenia Pytanie: Jak Scheme odróżnia listę obiektów (obj 1 obj 2...) od stosowania procedury (procedure arg...)? Odpowiedź: Musimy wyraźnie podpowiedzied systemowi, że będziemy traktowad listę jako strukturę danych a nie jako aplikację procedury 40

Proste wyrażenia Wymuszenie cytowania za pomocą formy specjalnej - quote (quote (1 2 3 4)) (1 2 3 4) (quote ("a" "bb")) ("a" "bb") (quote (+ 3 4)) (+ 3 4) Znak pojedynczego cudzysłowia ( ) '(1 2 3 4) (1 2 3 4) '((1 2)(3 4)) ((1 2)(3 4)) '(/ (* 2-1) 3) (/ (* 2-1) 3) 41

Proste wyrażenia Wyrażenie quote: nie jest aplikacją procedury zatrzymuje ocenę wyrażenia jest inną formą składni Scheme-a Scheme obsługuje kilka innych form składni Każda z form składni jest inaczej traktowna 42

Proste wyrażenia Przykład (quote hello) hello Symbol hello musi byd cytowany w celu zapobieżenia traktowania hello jako zmiennej Symbole i zmienne w Scheme-ie są podobne do symboli i zmiennych w matematycznych wyrażeniach i równaniach 43

Proste wyrażenia Cytując listę - Scheme traktuje formę w nawiasach jako listę niż jako zastosowanie procedury Cytując identyfikator - Scheme traktuje identyfikator jako symbol a nie zmienną Symbole są zwykle stosowane do: reprezentowania zmiennych w sposób symboliczny w równaniach lub programach jako słowa reprezentujące wyrażenia języka naturalnego 44

Proste wyrażenia Procedury Scheme-a do manipulacji listami: car (pierwszy element listy - głowa) cdr (reszta listy - ogon) Procedury te wymagą niepustej listy jako argumentu Przykładowo: (car '(a b c)) a (cdr '(a b c)) (b c) (cdr '(a)) () 45

Proste wyrażenia Inne przykłady: (car (cdr '(a b c))) b (cdr (cdr '(a b c))) (c) (car '((a b) (c d))) (a b) (cdr '((a b) (c d))) ((c d)) 46

Proste wyrażenia Procedura do konstruowania listy cons: wymaga dwóch argumentów dodaje element na początek listy określane jako połącz elementy w listę (cons 'a '()) (a) (cons 'a '(b c)) (a b c) (cons 'a (cons 'b ())) (a b) (cons '(a b) '(c d)) ((a b) c d) 47

Proste wyrażenia Przykładowe wywołania procedury cons: (car (cons 'a '(b c))) a (cdr (cons 'a '(b c))) (b c) (cons (car '(a b c)) (cdr '(d e f))) (a e f) (cons (car '(a b c)) (cdr '(a b c))) (a b c) 48

Proste wyrażenia Uwagi do cons: procedura cons tworzy parę cdr z pary nie musi byd listą Lista to sekwencja par Każdy ogon z pary jest następnym elementem pary w sekwencji a b c d () 49

Proste wyrażenia Lista właściwa: cdr z ostatniej pary w liście jest listą pustą lista pusta jest listą właściwą każda para, dla której ogon jest lista właściwą to również jest to właściwa lista Lista niewłaściwa: drukowana w notacji kropkowane-pary (cons 'a 'b) (a. b) (cdr '(a. b)) b (cons 'a '(b. c)) (a b. c) 50

Proste wyrażenia Kropkowana para - reszta (ogon) nie jest listą Lista właściwa zawsze drukowana bez kropek '(a. (b. (c. ()))) (a b c) Procedura list (podobna do cons) wywoływana z dowolną liczbą parametrów zawsze tworzy listę właściwą (list 'a 'b 'c) (a b c) (list 'a) (a) (list) () 51