Zobrazit plnou verzi příspěvku: test na prítomnosť v zozname

Augur
30.07.2008, 12:33
1. Ako zistím, či sa daný prvok (číslo) nachádza v zozname..?
Vytvoril som si zoznam (3 7 2 1 4 5) a potrebujem zistiť, či sa "2" nachádza v zozname.. Jediné, čo ma napadá je testovať celý zoznam cyklicky

2. Čisto teoreticky, maximálne koľko premenných (alebo záznamov v zozname)je možné zapísať ? V literatúre sa uvádza že je to závislé od pamäte počítača alebo softvéru.

Ďakujem za odpovede.

Vladimír Michl
30.07.2008, 14:17
ad 1) to by bylo pomalé - použijte funkci (member)

 
ad 2) není tam nějaký snadno dosažitelný limit - v běžné aplikaci na to určitě nenarazíte

chlebovsky
30.07.2008, 14:20
Zjištění zda je nějaký prvek v seznamu je naprosto jednoduché, jen záleží na tom jak je seznam tvořen.
a) (setq sez (list 1 2 3 4 5 6 7 8 9 10))
  test zda je tam číslo 3  (member 3 sez)
  vrátí (3 4 5 6 7 8 9 10) a první člen je právě hledané číslo
  test zda je tam 12 (member 12 sez)
  vrátí nil - to znamená že není
b) (setq sez (list (cons 1 "A")(cons 2 "B")(cons 3 "C")))
tady (member 1 sez) vrátí taky nil
proto je třeba toto :
(assoc 1 sez) a vrací jen daný člen seznamu
 
a na druhou otázku, jste si opověděl v podstatě sám
opravdu délka seznamu není nijka omezená
a pokud překročí danou mez paměti to poznáte, protože tvrdý restart je jediná věc co tomu pomůže
:-)
používám seznamy s cca 100 000 body (x y z) a funguje.
Čím delší tím pomalejší ale funguje

Augur
31.07.2008, 09:58
Ďakujem za obe odpovede.