;;; Funcao que recebe uma lista e uma posicao e retorna ;;; ;;; outra lista duas listas: a primeira contendo os ;;; ;;; elementos ate e inclusive a posicao indicada, e a ;;; ;;; segunda contendo o restante. (defun split (lista pos) (list (split-up-to lista pos) (split-after lista pos)) ) ;;; Funcao que pega a primeira parte da LISTA, ate' POS ;;; Numeracao de posicoes comeca de 1 ;;; ;;; Casos extremos: ;;; se POS <= 0, retorna lista vazia ;;; se POS > comprimento da lista, retorna a lista inteira (defun split-up-to (lista pos) (cond ((<= pos 0) ()) ((null lista) lista) (t (cons (car lista) (split-up-to (cdr lista) (1- pos)))) ) ) ;;; Funcao que recebe uma lista e uma posicao e retorna ;;; ;;; outra lista contendo os elementos apos a posicao ;;; ;;; indicada (posicoes numeradas a partir de 1) ;;; ;;; ;;; Casos extremos: ;;; se POS <= 0, retorna a lista inteira ;;; se POS > comprimento da lista, retorna lista vazia (defun split-after (lista pos) (cond ((<= pos 0) lista) ((null lista) ()) (t (split-after (cdr lista) (1- pos))) ) )