Sunteți pe pagina 1din 2

Laborator 1 CLISP.

Problema 27 ()
Este dat lista L de atomi numerici ntregi. Aplicnd recursia s se construiasc lista ce conine doar elementele
listei L ce au valoarea mai mare ca 1 i mai mic de 100.
Rezolvare
Solutia 1:
(defun recursion-list (l)
(cond ((null l) ())
((< (first l) 1) (recursion-list (rest l) ))
((> (first l) 100) (recursion-list (rest l) ))
(t (cons (first l) (recursion-list (rest l) ))
)
)
)
Solutia 2:
(defun recursion-list (l)
(if (null l) '()
(append (recursion-list (selectMici (first l) (rest l))) (list (first l)) (recursion-list (selectMari (first l) (rest l))))
)
)
(defun selectMari (l)
(cond ((null l) '())
((< 1 (first l)) (cons (first l) (selectMari 1 (rest l))))
(t (selectMari 1 (rest l)))
)
)
(defun selectMici (l)
(cond ((null l) '())
((> 100 (first l)) (cons (first l) (selectMici 100 (rest l))))
(t (selectMici 100 (rest l)))
)
)

Laborator 2 CLISP. Problema 27 ()


Expresiile aritmetice se construesc cu ajutorul produciilor :
ET
EE+T
TF
TT*F
Fatom numeric
Fatom simbolic
S se defineasca funcia care verific corectitudinea expresiei arbitrare prezentate sub forma unei liste.
Exemplu a*b2*5+a*x = (A * B2 * 5 + A * X)
Rezolvare
Solutia 1
(defun divide (w &aux (n (truncate (/ (length w) 2))))
(mapcar #'list (subseq w 0 (1+ n)) (reverse (subseq w (1- n)))))
(defun collect (w)
(when w (append (car w) (collect (cddr w)))))
(defun check-s (w &aux (a (car w)))
(cond ((null w) t)
((or (eq a '+) (eq a '*)) nil)
((check-s (cdr w)))))
(defun check-m (w &aux (a (car w)))
(cond ((null w) t)
((or (eq a '+) (eq a '*)) (check-m (cdr w)))
(t nil)))
(defun correct-expression-p (w &aux (v (divide w)))
(and (check-s (collect v)) (check-m (collect (cdr v)))))
Solutia 2
(defun check-expr (e)
(let ((s nil)
(v (mapcar #'(lambda (x) (cond ((numberp x) 1)
((member x '(+ - * /)) -1)
((listp x) (if (check-expr x) 1 0))
(t 1))) e)))
(cond ((= (car v) -1) nil)
((= (car v) 0) nil)
((= (car (last v)) -1) nil)
(t (push (car v) s)
(dolist (i (cdr v) t)
(when (or (zerop i) (= i (car s))) (return nil))
(push i s))))))

S-ar putea să vă placă și