Change dir

parent 0890bc75
(defun my_last (lista)
(if (null lista)
nil
(if (null (rest lista))
lista ; testa se a lista so tem um elemento
(my_last (rest lista)) ; recursao no resto da lista
)
)
)
(defun penultimo (lista)
(let ((reverso (reverse lista))) ; coloca na variavel reverso o
; reverse de lista
(cond
((null reverso) nil)
;; se a lista tem 2 ou menos elementos, retorno a propria
((<= (length reverso) 2)  lista)
;; se tiver mais de 2 elementos, construo uma lista
(t (list (second reverso) (first reverso)))
)
)
)
;;; Função que retorna o elemento na K-ésima posição de ;;;
;;; uma lista. Se a posição desejada eh maior que a ;;;
;;; última da lista, retorna NIL. ;;;
(defun element-at (org-list pos &optional (ini 1))
(if (eql ini pos)
(car org-list)
(element-at (cdr org-list) pos (+ ini 1))))
;;; Outra solucao
(defun element-at (lista n)
(if (= n 1)
;; o primeiro elemento esta na posicao 1
(first lista)
(element-at (rest lista) (1- n))
)
)
(defun comprimento (lista)
(if (null lista)
0
(1+ (comprimento (rest lista)))))
(defun inverte (lista)
(inverte-aux lista () )
)
(defun inverte-aux (lista resto)
(if (null lista)
resto
(inverte-aux (rest lista) (cons (first lista) resto) )
)
)
(defun palin (lista)
(equal lista (reverse lista))
)
;;; Recebe uma lista e retorna uma lista que, no lugar dos ;;;
;;; elementos que são sub-listas, possui os elementos dessas ;;;
;;; sub-listas, recursivamente. ;;;
(defun flatten (orig-list)
(if (eql orig-list nil)
nil
(let ((elem (car orig-list)) (resto-list (cdr orig-list)))
(if (listp elem)
(append (flatten elem) (flatten resto-list))
(append (cons elem nil) (flatten resto-list))))))
(defun compress (lista)
(cond
((null lista) nil)
((null (cdr lista)) lista)
;; se o primeiro elemento (de lista) e' igual ao consecutivo
;; (primeiro do resto)
((eql (first lista) (first (rest lista)))
;; entao ignora-se o primeiro da lista e continua recursivamente no resto
(compress (rest lista)))
(t (cons (first lista) (compress (rest lista))))
)
)
(defun pack (lista)
(if (eql lista nil)
nil
(cons (pega lista) (pack (tira lista)))
)
)
(defun pega (lista)
(cond ((eql lista nil) nil)
((eql (cdr lista) nil) lista)
((equal (car lista) (cadr lista))
(cons (car lista) (pega (cdr lista))))
(t (list (car lista)))
)
)
(defun tira (lista)
(cond ((eql lista nil) nil)
((eql (cdr lista) nil) nil)
((equal (car lista) (cadr lista))
(tira (cdr lista)))
(t (cdr lista))
)
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment