Warning: strpos() [function.strpos]: Empty needle in /home/dealer/kasat/pkg/cahir/web/html/lib/plugins/translation2/action.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at /home/dealer/kasat/pkg/cahir/web/html/lib/plugins/translation2/action.php:53) in /home/dealer/kasat/pkg/cahir/web/html/inc/actions.php on line 163
lisp-sem [Krystian Bacławski Wiki]
 

Seminarium: Rodzina języków LISP

Streszczenie

Kilka z cytatów ze strony http://lispers.org:

  1. Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot. Eric Raymond, “How to Become a Hacker”
  2. Lisp has jokingly been called “the most intelligent way to misuse a computer”. I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts. Edsger Dijkstra, CACM, 15:10
  3. Lisp … made me aware that software could be close to executable mathematics. L. Peter Deutsch
  4. Lisp is a programmable programming language. John Foderaro, CACM, September 1991
  5. Lisp is a language for doing what you've been told is impossible. Kent Pitman
  6. Greenspun's Tenth Rule of Programming: any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp.

Na seminarium zajemiemy się poznawaniem języków z rodziny Lisp. Żadna wcześniejsza styczność z tym językiem nie jest wymagana.

Program

Będziemy się zajmować co najmniej trzema odmianami LISPa:

Skupimy się na omówieniu:

  • języka Common Lisp,
  • technik wykorzystania makr do metaprogramowania,
  • modelu obiektowego,
  • różnicach między dialektami.

Prezentacja

Poniżej znajdziecie kilka rad odnośnie przygotowania prezentacji na seminarium. Dobrym pomysłem jest poszukanie na internecie informacji o tym jak nie należy robić prezentacji ;-)

Należy:

  • Odpowiedź sobie na pytanie: “Co chce przekazać uczestnikom seminarium?”.
  • Nadać prezentacji odpowiednią strukturę.
  • Wymagać od uczestników interakcji.
  • Przeprowadzić próbę generalną!

Błędy:

  • Nieczytelne slajdy:
    • za dużo wierszy na stronie,
    • jasnozielony lub żółty kolor,
    • małe czcionki,
  • Mówienie cicho i/lub do ściany.
  • Czytanie ze slajdów.
  • Brak treningu.
  • Nieprzestrzeganie ram czasowych.

Być może dobrym pomysłem byłoby:

  • umieszczanie większych przykładów i ich wytłumaczenie,
  • ożywienie widowni poprzez zadanie prostego przykładu do zaprogramowania (maksimum kilka linii),
  • zrobienie kilku ćwiczeń z książek celem przekonania się na własnej skórze co może być skomplikowane / nietypowe / w inny sposób ciekawe (i podzielenie się tym z widownią),
  • pobieżne zaprezentowanie możliwości biblioteki standardowej przy omawianiu danego tematu.

Tematy

UWAGA: Oficjalna strona przedmiotu jest tutaj :!:

Podstawy Common Lisp

Typy danych (2h)

Program:

  • liczby całkowite, wymierne, zmiennoprzecinkowe, urojone
  • znaki i ciągi znakowe
  • symbole
  • listy
  • sekwencje
  • wektory
  • tablice
  • tablice mieszające
  • struktury

Materiały:

  • ANSI Common Lisp – 3, 4, 8, 9, 12
  • Practical Common Lisp – 10, 12

Funkcje i zmienne (1h)

Program:

  • zasięg widoczności
  • przypisanie i referencje
  • funkcje jako wartości pierwszego rzędu
  • funkcje anonimowe, domknięcia, currying

Materiały:

  • ANSI Common Lisp – 6
  • On Lisp – 4, 5, 6
  • Practical Common Lisp – 5, 6

Instrukcje sterujące (1h)

Program:

  • grupowanie instrukcji
  • instrukcje warunkowe
  • instrukcje iterujące
  • wyjątki

Materiały:

  • ANSI Common Lisp – 5
  • Practical Common Lisp – 7, 19, 20, 22

Wprowadzenie do makr (1h)

Program:

  • definiowanie
  • rozwijanie
  • makra w trakcie parsowania i kompilacji

Materiały:

  • ANSI Common Lisp – 10
  • On Lisp – 7, 8
  • Practical Common Lisp – 8, 9

Obsługa wejścia-wyjścia (1h)

Program:

  • strumienie
  • ścieżki
  • pliki i katalogi

Materiały:

  • ANSI Common Lisp – 7
  • Practical Common Lisp – 14, 15, 18

Biblioteka standardowa (1h)

Przegląd operacji na:

  • sekwencjach
  • listach
  • ciągach znakowych, etc.

Materiały:

  • ANSI Common Lisp – D
  • Practical Common Lisp – 11

Common Lisp Object System

Wprowadzenie do CLOS (2h)

Program:

  • Ewolucja systemów obiektowych w Common Lisp.
  • Różnice między CLOS, a modelami obiektowymi z innych języków.
  • Podstawy CLOS:
    • klasy, sloty, instancje,
    • funkcje uogólnione, metody,
    • dziedziczenie, enkapsulacja,
    • kombinatory metod (dynamiczny dispatching), multimetody,
  • Jakieś przykłady.

Materiały:

  • On Lisp – 25
  • ANSI Common Lisp – 11, 17
  • Practical Common Lisp – 16, 17, przykłady 23-31
  • Object-Oriented Programming in Common Lisp: A Programmer's Guide to CLOS

Meta-object Protocol (2h)

Program:

  • Czym jest MOP?
  • Związek między CLOS, a MOP.

Materiały:

Metaprogramowanie

Programowanie z użyciem makr (2h)

Program:

  • Idea programowania bottom-up.
  • Wprowadzenie do makr.
  • Ekspansja.
  • Kiedy używać makr?
  • Makra readera.
  • Przejmowanie zmiennych.
  • Jakiś większy przykład użycia (eleminacja boiler-plate code).

Materiały:

  • ANSI Common Lisp – 10
  • On Lisp – 7, 8, 9, 17
  • Practical Common Lisp – 8, 9
  • Let Over Lambda – 2, 3, 4

Techniki pisania makr (2h)

Program:

  • Najczęściej popełniane błędy przy projektowaniu makr.
  • Obliczenia w trakcie kompilacji.
  • Makra anaforyczne (celowe przechwytywanie zmiennych).
  • Makra zwracające funkcje.
  • Metamakra (makra definiujące makra).
  • Przykłady (z niżej wymienionych książek/rozdziałów).

Materiały:

  • On Lisp – 10, 11, 12, 13, 14, 15, 16
  • Let Over Lambda – 5, 6

Scheme

Scheme vs. Common Lisp (2h)

Program:

  • Filozofia Scheme (minimalizm).
  • Różnice w podstawowych konstrukcjach.
  • Rozróżnienie NIL i false.
  • Lisp-1 vs. Lisp-2.
  • Higieniczne makra.
  • Pełne kontynuacje.
  • Brak dynamicznych zasięgów.
  • Biblioteka R6RS.
  • SLIB i SRFI.

Materiały:

Kontynuacje (1h)

Program:

  • Klasyfikacja i zastosowanie kontynuacji.
  • Continuation Passing Style.
  • Obliczenia niedeterministyczne.

Materiały:

  • Teach Yourself Scheme in Fixnum Days – rozdziały 13-14.
  • On Lisp – 20.
  • Yet Another Scheme Tutorial – 16.
  • Structure and Interpretation of Computer Programs – 4.3.

Clojure

W opracowywaniu slajdów mogą się przydać prezentacje zamieszczone w serwisach wylistowanych w punkcie prezentacje video na dole bieżącej strony.

Filozofia Clojure (1h)

Program:

  • Związek z JVM.
  • Promowanie programowania czysto funkcyjnego.
  • Trwałe struktury danych.
  • Odejście od programowania obiektowego (w klasycznym sensie).
  • Niemodyfikowalny stan: rozdział na wartość, stan, tożsamość.
  • Programowa pamięć transakcyjna.

Materiały:

Clojure vs. Common Lisp (2h)

FIXME Uzupełnić!

Program:

  • Różnice w podstawowych konstrukcjach.
  • Wbudowane struktury danych.

Materiały:

  • Practical Clojure – 2, 3, 4, 5.
  • Clojure for Lisp Programmers 1 2

Programowanie współbieżne i równoległe (1-2h)

Program:

  • Porównanie dostępnych mechanizmów.
  • Referencje i operacje transakcyjne.
  • Operacje atomowe.
  • Korzystanie z asynchronicznych agentów.
  • Zmienne przypisane do wątku.
  • Walidatory i obserwatorzy.
  • Futures, promises.

Materiały:

Programowanie modularne i obiektowe (1-2h)

Program:

  • Symbole, przestrzenie nazw.
  • Typy danych, protokoły, multimetody.
  • Łączenie z Javą.

Materiały:

  • Practical Clojure – 7, 9, 10, 13.

Specjalizowane dialekty Lisp-u

Nyquist (2h)

Zarezerwowane dla Darka Jackowskiego.

Program:

  • Czym jest Nyquist?
  • Podstawowe pojęcia (zachowania, dźwięki, transformacje)
  • Obsługa dźwieków i funkcje pomocnicze)
  • Filtry
  • Generatory
  • DSP, FFT, LCP
  • Biblioteki (synteza, filtry)

Materiały:

Emacs Lisp (1-2h)

Program:

  • Rozszerzalność edytora Emacs.
  • Różnice między Emacs Lisp, a CL i Scheme.
  • Przykłady rozszerzeń edytora Emacs z omówieniem wywołań bibliotecznych.

Materiały:

Script-Fu (1h)

Program:

  • Zastosowania Script-Fu.
  • Związek Script-Fu ze Scheme.
  • Biblioteka funkcji.
  • Omówienie przykładowych skryptów rozszerzających funkcjonalność GIMP-a.

Materiały:

ACL2 (2h)

Program:

  • Czym jest ACL2?
  • Zastosowania w przemyśle.
  • Składnia twierdzeń.
  • Przykładowe dowody.
  • Porównanie z innymi systemami dowodzenia twierdzeń (Isabelle/HOL, Coq, etc.)

Materiały:

Różności

Dedykowane rozwiązania sprzętowe i programowe (1-2h)

Program:

  • Maszyny Lisp-owe
  • Systemy operacyjne napisane w Lisp-ie

Materiały:

Lisp w systemach wbudowanych (1h)

Program:

  • Prezentacja kompilatora ECL
  • Prezentacja możliwości środowiska ECL
  • Osadzanie kodu lispowego w języku C

Materiały:

Rozszerzanie Common Lisp przy pomocy bibliotek C (1h)

Program:

  • Opis procesu wrappowania kodu C do Lispa.

Materiały:

Programowanie zorientowane kontekstowo (1h)

Program:

  • Czym jest COP (Context Oriented Programming)?
  • Opis biblioteki ContextL.

Materiały:

Programowanie reakcyjne w Lispie (1h)

FIXME Uzupełnić!

Techniki kompilacji programów Lispowych (2h)

FIXME Uzupełnić!

Program:

  • Kompilacja Lispu do C.

Materiały:

Inne

Można szukać ciekawego tematu na którejś z konferencji wylistowanej tu: Lisp conferences list i przygotować z tego prezentację.

Odnośniki

Implementacje

Common Lisp

Scheme

Książki

Płatne

Darmowe

Dokumentacja

Serwisy tematyczne

Prezentacje video

 
lisp-sem.txt · Last modified: 2010/12/15 18:09 by Krystian Bacławski
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-No Derivative Works 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki