Cad LISP

background image

LISP

LISP

Standard języka LISP

Standard języka LISP

Komputerowe Wspomaganie

Komputerowe Wspomaganie

Projektowania

Projektowania

background image

LISP

LISP

Struktura Listy

Struktura Listy

(abc de fgh)

(abc de fgh)

Separator -
Spacja

Separator -
Spacja

Element Listy -
Atom

Element Listy -
Atom

Początek Listy:
(

Początek Listy:
(

Koniec Listy: )

Koniec Listy: )

Podstawowym wyróżnikiem składni języka LISP

oraz podstawową strukturą danych jest

LISTA

Znaczniki początku i końca listy są naturalnymi separatorami.

background image

LISP

LISP

Lista: Struktura dynamiczna

Lista: Struktura dynamiczna

lista

X

X

A

A

/

/

B

B

/

/

C

C

/

/

0

0

01

111 1

0

0

01

101 1

0

0

01

110 1

1

0

01

011 1

0

1

11

110 1

0

0

01

111 1

0

0

01

101 1

0

0

01

110 1

1

0

01

011 1

0

1

11

110 1

Wartość

Wartość

Identyfikator

Identyfikator

Wskazanie (pointer)

Wskazanie (pointer)

?

?

0

0

01

111 1

0

0

01

101 1

0

0

01

110 1

1

0

01

011 1

0

1

11

110 1

/

/

Wskazanie puste: NIL

10

10

/

/

Wartość = 10

Wskazanie puste: NIL

?

?

0

0

01

111 1

0

0

01

101 1

0

0

01

110 1

1

0

01

011 1

0

1

11

110 1

Anonimowa zmienna przechowująca dwa wskazania:
- wartość
- inna zmienna

zmienna

background image

LISP

LISP

Lista: Struktura dynamiczna

Lista: Struktura dynamiczna

Głowa Listy: A
Ogon Listy: (B C)

Głowa Ogona Listy: B
Ogon Ogona Listy: (C)

Głowa
Listy

Głowa
Listy

Head

Ogon Listy

Ogon Listy

B

C

/

/

Tail

A

B

C

/

/

Lista: (A B C)

Lista

(C)?

background image

LISP

LISP

Lista: Struktura dynamiczna

Lista: Struktura dynamiczna

Lista zagnieżdżona: (A (B C) D)

A

D

/

/

Lista

B

C

/

/

Stopień zagnieżdżenia listy jest teoretycznie

nieograniczony

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcja języka LISP ma postać listy

Instrukcja języka LISP ma postać listy

Instrukcja Przypisania:

(

setq

x 5)

Głowa listy:

funkcja

predefiniowana

operator

funkcja użytkownika

Ogon listy:

lista argumentów

adekwatna do

funkcji lub operatora

Instrukcja zagnieżdżona, Ewaluacja:

(

setq

y (

setq

x 5))

(

setq

z y)

y=5

y=5

z=5

z=5

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcja Przypisania:

(

setq

x (A B C))

Głowa listy:

funkcja

predefiniowana

operator

funkcja użytkownika

Ogon listy:

lista argumentów

adekwatna do

funkcji lub operatora

Błąd: Brak funkcja (Error: null function)

Błąd: Brak funkcja

(Error: null function)

Głowa listy:

funkcja

predefiniowana?

Operator?

funkcja użytkownika?

Ogon listy:

lista argumentów

adekwatna do

funkcji lub operatora

(A B C)

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcja Cytowania:

(

quote

x)

(

quote

(A B C))

Uprawniona Instrukcja Przypisania:

(

setq

x (

quote

(A B C)))

Symbol X

Symbol X

Lista (A B C)

Lista (A B C)

Instrukcja Wymuszonej Ewaluacji:

(

eval

x)

Błąd: Brak funkcja (Error: null function)

Błąd: Brak funkcja

(Error: null function)

Uprawniona Instrukcja Ewaluacji Listy:

(

eval

(

quote

x)) (

eval

x)

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcja Tworzenia Listy:

(

list

x y z)

Ogon listy:

lista argumentów

dowolnego

typu

Rezultat: (nil nil nil)

x, y, z podczas tworzenia listy traktowane są jako
identyfikatory zmiennych podlegających ewaluacji.
Wskazanie na wartość zmiennej jest puste - NIL

(

setq

x 2) (

setq

y 2.3)(

setq

z -1.5)

Rezultat: (2 2.3 -1.5)

(

list

x y z)

Uwaga: Wykonanie instrukcji (list x y z) spowoduje utworzenie listy (2 2.3 -1.5)

To tylko tyle! Komputer się narobi a my nie mamy z tego żadnego pożytku.

Należy wykonać instrukcję przypisania: (setq P (list x y z))

Uwaga: Wykonanie instrukcji (list x y z) spowoduje utworzenie listy (2 2.3 -1.5)

To tylko tyle! Komputer się narobi a my nie mamy z tego żadnego pożytku.

Należy wykonać instrukcję przypisania: (setq P (list x y z))

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcje Dostępu do Listy:

(

car

lista)

(

cdr

lista)

B

C

/

/

A

B

C

/

/

Lista: (A B C)

c

A

r , c

D

r  c....r  (c

ad

r x), (c

add

r

x)...

Instrukcje Zagnieżdżone:

(car (cdr lista)) = (

cadr

lista) = B

(car (cdr (cdr lista))) = (

caddr

lista) = C

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcja Tworzenia Pary Kropkowej:

Specjalny Rodzaj Listy: (A . B)

(dotted pair)

(

cons

A B)

A

B

Przykłady: (cons ‘x ‘y)

 (X . Y)

(cons ‘x ‘(y))

 (X Y)

(cons ‘(x y) ‘z)

 ((X Y) . Z)

Komentarz: Drugi przykład wskazuje na możliwość uzupełnienia listy

przez wstawienie elementu na początku listy.

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcja Uzupełniania Listy:

(

append

lista1 lista2)

Ogon listy:

lista argumentów typu LIST

typu LIST

Przykłady: (append ‘() ‘(x y))

 (X Y)

(append ‘(x y) ‘(z))

 (X Y Z)

(append ‘(x y) ‘z)

Błąd: Zły typ argumentu (Error: bad argument type)

Błąd: Zły typ argumentu

(Error: bad argument type)

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcja Warunkowa:

(

if

warunek (instrukcja))

Instrukcja warunkowa prosta:
Jeżeli

warunek

ma wartość

prawda (T)

wykonaj instrukcję.

(

if

warunek (instrukcja1)

(instrukcja2))

Instrukcja warunkowa złożona:
Jeżeli

warunek

ma wartość

prawda (T)

wykonaj

instrukcję 1
w przeciwnym przypadku wykonaj instrukcję 2.

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcja Warunkowa Zagnieżdżona:

(

cond

(

warunek1

(Blok

(Blok

Instrukcji)

Instrukcji)

)

(

warunek2

(Blok

(Blok

Instrukcji)

Instrukcji)

)

...
(

T

(Blok Instrukcji)

(Blok Instrukcji)

)

)

Jeżeli kolejny z

warunków

ma wartość

prawda

(T)

wykonany zostaje blok instrukcji zawarty w

liście

(

warunek

(Blok Instrukcji)

(Blok Instrukcji)

).

Następujące po nim

warunki

nie są

sprawdzane.

Opcjonalnie

Opcjonalnie

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Instrukcja Pętli:

(

while

warunek

(Blok Instrukcji)

(Blok Instrukcji)

)

Dopóki

warunek

ma wartość

prawda

(T)

wykonuj (Blok Instrukcji)

(Blok Instrukcji)

Uwaga: Początkowa wartość warunku wynosząca T(prawda) umożliwia

realizację pętli. Instrukcje wykonywane wewnątrz pętli muszą

zmieniać wartość warunku tak aby możliwe było wyjście z pętli.

Uwaga: Początkowa wartość warunku wynosząca T(prawda) umożliwia

realizację pętli. Instrukcje wykonywane wewnątrz pętli

muszą

zmieniać wartość warunku tak aby możliwe było wyjście z pętli.

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Arytmetyka LISP

(

+

x y)

Głowa listy:

operator

Ogon listy:

lista argumentów

typu numerycznego

2

3

12

5

.

1

5

.

2

5

(/ (* (+ 5 2.5 1.5) 12) (+ 3 2))

(/ (* (+ 5 2.5 1.5) 12) (+ 3 2))

Uwaga: Jeżeli wszystkie argumenty są typu całkowitego, to wynik operacji

jest również typu całkowitego. Jeżeli choć jeden argument jest typu

rzeczywistego, to wynik jest typu rzeczywistego

Uwaga: Jeżeli wszystkie argumenty są typu całkowitego, to wynik operacji

jest również typu całkowitego. Jeżeli choć jeden argument jest typu

rzeczywistego, to wynik jest typu rzeczywistego

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Funkcja Użytkownika:

(

defun

Nazwa_Funkcji

(

argumenty

/

zmienne_lokalne

)

(Blok Instrukcji)

(Blok Instrukcji)

)

Nazwa funkcji: nie może zawierać znaku

SPACJA

SPACJA

Lista argumentów i zmiennych lokalnych:

• obligatoryjny element definicji funkcji

obligatoryjny element definicji funkcji

• argumenty: Lista argumentów formalnych

• znak /

(slash)

: Separator argumentów i zmiennych lokalnych.

Przed i po znaku

slash

muszą być

spacje

.

Występuje opcjonalnie.

• zmienne lokalne: Lista zmiennych używanych w bloku

instrukcji. To jest dobry zwyczaj!

background image

LISP

LISP

Lista: Instrukcja Języka

Lista: Instrukcja Języka

Funkcja Użytkownika:

(

defun

Nazwa_Funkcji

(/

zmienne_lokalne

)

)

(Blok

(Blok

Instrukcji)

Instrukcji)

)

(

defun

Nazwa_Funkcji

()

(Blok Instrukcji)

(Blok Instrukcji)

)

(

defun

Nazwa_Funkcji

(

argumenty

)

(Blok Instrukcji)

(Blok Instrukcji)

)

Wynikiem funkcji jest wynik ostatniej instrukcji w bloku

Wynikiem funkcji jest wynik ostatniej instrukcji w bloku

(defun Radian (deg)(/ (* deg PI)
180))

(defun Radian (deg)(/ (* deg PI)
180))

(defun PIx2 (rad)
(if (< rad 0)
(+ (* 2 PI) rad)
(eval rad))
)

(defun PIx2 (rad)
(if (< rad 0)
(+ (* 2 PI) rad)
(eval rad))
)

(defun Rad0_2PI (deg /
rad)
(setq rad (Radian deg))
(Pix2 rad)
)

(defun Rad0_2PI (deg /
rad)
(setq rad (Radian deg))
(Pix2 rad)
)


Document Outline


Wyszukiwarka

Podobne podstrony:
autocad lisp, Cad Algorytmy
autocad lisp, Cad AutoLISP
autocad lisp, Cad 2D
autocad lisp, Cad ProjektLSP
autocad lisp, Cad Programowanie
Technologia Maszyn CAD CAM
Autodesk Inventor CAD
cad demo 1
CAD CAM KWPPWPS Zad graf PDF
cad 1 I Cw 08 2014
CAD ZADANIA 1 2009 id 107691 Nieznany
AutoCAd, CAD 3 wydruk
droga cad 1, 4
Focha 102 13 ALEJA3MAJACZB CAD
TEKST, rar cad

więcej podobnych podstron