====== JUI - 4. cviceni ====== ===== Vystupni funkce===== ;;format out_stream "format_retezec" ;; t = stream na nejvyssi urovni (format t "~A - ~A je ~A" 3 2 (- 3 2)) 3 - 2 je 1 ;;~A tiskne jako princ nebo ~S jako print ~F realne cislo (Defun interpret() (print "hlaska>") (print (Eval (Read)))) (interpret) ) ===== Vstupni funkce ===== ;; read - precte vyraz lispu ;; read-line, read-char (read) ;;pak zadame (3 4 a b) ;;vystup: (3 4 a b) ---- ;;funkce chci cislo, ktera precte vstup a opakuje tak dlouho dokud neni cislo ktere vytiskne (defun cislo (hlaska) (loop (print hlaska) (setf a (read)) (when (numberp a) (format t "~a ~%" a) (return a)) ) ) ;;precte cislo (defun cticislo (hlaska) (loop (print hlaska) (setf a (read)) (when (numberp a) (return a)) ) ) ;;funkce, ktera precte cislo a vypise n znaku x za sebou (defun xkrat () (setf n (cticislo "Zadej n:")) (dotimes (i n) (princ 'X)) ) ;;funkce, ktera precte dva seznamy, a vypise spojeny seznam (skolni priklad, nepouzivat append) (defun spoj (a b) (cond ((car a) (cons (car a) (spoj (cdr a) b))) (t b) ) ) (defun vytiskni-spoj () (print "zadej 1. seznam") (setf a (read)) (print "zadej 2. seznam") (setf b (read)) (print (spoj a b)) ) ;;funkce, ktera precte prvek, index a seznam a vlozi prvek na dane misto v seznamu (defun vloz (seznam kam prvek) (cond ((null seznam) (cons prvek seznam)) ;;pretekli jsme index, vlozime ihned a vylezeme nahoru ( (> kam 0) (cons (car seznam) (vloz (cdr seznam) (1- kam) prvek))) ;;zanorime se o krok niz (t (cons prvek seznam)) ;;jsme na spravne pozici ) )