Skip to content

Instantly share code, notes, and snippets.

@dcguim
Created September 16, 2015 03:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dcguim/e84f8d62b9654692fd11 to your computer and use it in GitHub Desktop.
Save dcguim/e84f8d62b9654692fd11 to your computer and use it in GitHub Desktop.
(defun proj (n k list)
(if (equal n (list-length list))
(nth k list)))
(defun zero (n)
(* 0 n))
(defun primrec (g h)
(labels ((f (&rest args)
(if (zerop (cadr args))
(funcall g (car args))
(funcall h (car args) (1- (cadr args)) (f (car args) (1- (cadr args)))))))#'f))
(defun mult (x y)
#'(lambda ()
(primrec #'zero #'(lambda (l) (+ (proj 3 1 l) (proj 3 3 l)))))x y)
@dcguim
Copy link
Author

dcguim commented Sep 16, 2015

Uma vez definida a função sucessor de n ...

(defun suc (n)
  (1+ n))

A função soma também dá o mesmo problema que a "mult": quando invocada ela simplesmente retorna y,
ao invés de realizar a operação.

(defun soma (x y)
    #'(lambda ()
        (primrec #'(lambda (x) (proj 1 1 x)) #'(lambda (l) (suc (proj 3 3 l)))))
   x y)

@arademaker
Copy link

vc pode me dar mais contexto? Não entendi exatamente o que vc está querendo fazer!

@dcguim
Copy link
Author

dcguim commented Sep 18, 2015

Eu quero realizar a operação multiplicação de duas entradas x e y com a função "mult":
(mult 3 4)
No entanto, eu quero definir a função multiplicação por recursão primitiva a partir das funções g e h.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment