;;; Funcao que recebe uma lista e um inteiro N ;;; e retorna a lista rotacionada N posicoes ;;; para a esquerda (defun rotate (lista pos) (if (null lista) () (let ((pos1 (mod pos (length lista)))) (append (split-after lista pos1) (split-up-to lista pos1)) ) ) ) ;;; 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))) ) ) (load "p32.lisp") (defun coprime (n m) (if (= 1 (my-gcd n m)) nil t ) )