assoc

Wyszukaj w słowniku

Dostępne słowniki:

Termin Definicja
assoc

Wyszukuje w liście asocjacyjnej pierwszy pasujący element

Funkcja jest bardzo przydatna przy analizowaniu list odczytywanych przez entget, lub tworzonych jako listy asocjacyjne (z wykorzystaniem połączenia funkcją cons).

Przykład
Rysujemy polilinię.
Odczytujemy jej defunicję
(setq polilinia(entget (car(entsel))))
W odpowiedzi możemy otrzymać coś podobnego do:
((-1 . <Entity name: -18fb08>) (0 . "LWPOLYLINE") (330 . <Entity name: -181308>) (5 . "1DF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbPolyline") (90 . 7) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 1.00441 5.93569) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 2.95232 7.06519) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 4.72314 5.88126) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 6.00359 6.96994) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 7.33852 6.03095) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 8.72793 5.97652) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 9.53161 6.30312) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))

teraz jeśli chcemy odczytać z niej wszystkie wierzchołki można to zrobić np tak:

(setq wierzchołki nil )
(while
    (setq wierzchołek (assoc 10 polilinia)) ; odczytujemy pierwszy wierchołek
    (setq wierzchołki (append wierzchołki (list (cdr wierzchołek))))        ; dodajemy go do listy wynikowej
    (setq polilinia (cdr (member wierzchołek polilinia) ) )    ; "obcinamy" początek listy za wyszukany element, by kolejny był wyszukany jako pierwszy.
)
(print wierzchołki)