Já anteriormente tinha construído alguns exemplos de funções "meio esquisitas", que quando se têm como argumento dão-se como resultado. Vejamos então, usando o LISP de 1960 de John McCarthy (JMC), os mesmos exemplos:
1. Função identidade, (f f) dá f.
> (eval. '((label ident (lambda (x) x))
y)
'((y ident)))
ident
ou
> (eval. '((lambda (x) x) '((lambda (x) x))) '()) ((lambda (x) x))
2. função diag definida por (label diag (lambda (x) (list x (list 'quote x))))
2.1 aplicada a 'list
> (eval. '(
(label diag (lambda (x) (list x (list 'quote x))))
y)
'((y list)))
(list (quote list))
e
> (eval.
(eval. '(
(label diag (lambda (x) (list x (list 'quote x))))
y)
'((y list))) '())
(list)
2.2 (diag 'diag)
> (eval. '((label diag (lambda (x) (list x (list 'quote x))))
y)
'((y diag)))
(diag (quote diag))
ou ainda
> (eval. (eval. '((label diag (lambda (x) (list x (list 'quote x)))) diag) '()) '()) ((label diag (lambda (x) (list x (list (quote quote) x)))) (quote (label diag (lambda (x) (list x (list (quote quote) x))))))e, ainda ainda,
> (eval. (eval. '((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x)))) '()) '()) ((lambda (x) (list x (list (quote quote) x))) (quote (lambda (x) (list x (list (quote quote) x)))))
E um exemplo extra do artigo original do JMC
> (eval. '((label ff (lambda (x) (cond ((atom x) x) ('t (ff (car x)))))) y) '((y ((a b) (c d))))) a
Created: NaN
Last updated: 24-03-2026 [22:45]
For attribution, please cite this page as:
Charters, T., "Expressões no LISP de 1960": https://nexp.pt/jmc-lisp2.html (24-03-2026 [22:45])
(cc-by-sa) Tiago Charters - tiagocharters@nexp.pt