Programové struktury


Lisp - seznamy


Příklad 1 - Block

ukázka funkce block

 (write-char #\Newline)

 (write (block nil (return) 1) )			;=>  NIL
 (write-char #\Newline)

 (write  (block nil (return 1) 2) )			;=>  1
 (write-char #\Newline)

 (write  (block nil (block alpha (return 1) 2)) )	;=>  1
 (write-char #\Newline)

 (write  (block alpha (block nil (return 1)) 2) )	;=>  2
 (write-char #\Newline)

 (write  (block nil (block nil (return 1) 2)) )		;=>  1
 (write-char #\Newline)
  

(block nil (return (values 1 2)) 3) ;=> 1, 2
(setq q (multiple-value-bind (v1 v2) (values 1 2) (vector v1 v2)))

Jak se pouzije "block" (tady s implicitnim return)

 (defun JakSeDelaBlock() ;; tohle je bonus ;-)
	(if T (block (write pi) (write pi) (write pi) (write pi) (write pi)) (write pi)
        )
 ) 
  

stáhnout


Příklad 2 - CAR, CDR a CONS

Příklad na chování seznamu a funkci CAR, CDR a CONS

CAR (Content of Address Register) - první prvek seznamu
CDR (Content of Decrement Register) - zbytek seznamu (bez prvního prvku)
CONS (Construction) - vytvoří seznam spojením CAR a CDR (tj. prvek připojí ke zbytku seznamu)

(car (1 2)) -> ERROR
(cons nil ('a)) -> ERROR

(write-char #\Newline)

(write (car '(1 2)))
(write-char #\Newline)

(write (cdr '(a b c d)))
(write-char #\Newline)

(write (cdr '(a)))
(write-char #\Newline)

(write (cons 'a '(b c)))
(write-char #\Newline)

(write (cons 'a nil))
(write-char #\Newline)

(write (cons 'a 'b))
(write-char #\Newline)

(write (cons nil 'a))
(write-char #\Newline)
  

stáhnout


Příklad 3 - Práce se seznamy

Do tohoto souboru můžete dopisovat svoje vlastní funkce

Funkce na generování náhodného seznamu celých čísel
Použití např.: (setq SEZ (ini 10))

(defun Ini (L)
	(loop for i from 1 to L collect (random 100))
)
  

Funkce member, jak ji zname z Prologu

(defun MyMember (x S)
	(cond 	((EQUAL X (CAR S)) 	T)
		((NULL S) 		NIL)
		(T 			(MyMember x (CDR S)))
	)
)  

stáhnout

Další úkoly:






  Zpět  

Poslední změna: 22. 3. 2004
Josef Steinberger