Ronie Uliana
Software Architect and journeyman Data Scientist
"It's 2002, and programming languages
have almost caught up with 1958"
Paul Graham - Revenge of the Nerds
Ronie Uliana
Alan Turing
Alonzo Church
Máquina de Turing
Lambda Calculus
<=equivalentes=>
Menos "charmoso", mais simples
Só "variáveis" e funções
(λa.a) x = x
(λab.ba) xz = zx
(λab.b) x = (λb.b)
(λab.ba) (yz) = (λb.b(yz))
x = x
x (λa.b) z = xb
(λ abc.b( abc)) (λab.b)
(λbc.b((λ ab. b)bc))
(λbc.b(c))
(λ abc.b( abc)) (λbc.b(c))
(λbc.b((λ bc. b( c))bc))
(λbc.b(b(c)))
2 + 3?
(λab.a (a (b ) ) ) (λabc.b(abc)) (λab.a(a(a(b))))
(λb. (λabc.b(abc)) ( (λabc.b(abc)) (b ) ) ) (λab.a(a(a(b))))
(λabc.b(abc)) ( (λabc.b(abc)) ((λab.a(a(a(b)))) ) )
(λabc.b(abc)) ( (λbc.b( (λ ab.a(a(a(b))))bc)) )
(λabc.b(abc)) (λbc.b(b(b(b(c)))))
(λbc.b( (λbc.b(b(b(b(c))))) bc))
(λbc.b(b(b(b(b(c))))))
0 = (λab.b)
1 = (λab.a(b))
2 = (λab.a(a(b)))
3 = (λab.a(a(a(b))))
...
Toda a sintaxe do Lisp
em uma linha:
Sério... essa é toda a sintaxe =/
1 + 2 = (+ 1 2)
1 + 2 + 3 + 4= (+ 1 2 3 4)
1 < 2 = (< 1 2)
x > 1 && x < 3 = (< 1 x 3)
(AST)
Abstract Syntax Tree é com um programa é representado depois do "parsing".
É como o computador sabe o que fazer primeiro.
a + b * 3
(+ a (* b 3))
(raiz nó
(raiz nó nó))
O código é uma lista
Posso manipular listas
Posso manipular o código
#lang racket
(require (for-syntax syntax/parse))
(define-syntax (: stx)
(syntax-parse stx #:datum-literals (+ - * / ^)
[(_ l ... + r ...) #'(+ (: l ...) (: r ...))]
[(_ l ... - r ...) #'(- (: l ...) (: r ...))]
[(_ l ... * r ...) #'(* (: l ...) (: r ...))]
[(_ l ... / r ...) #'(/ (: l ...) (: r ...))]
[(_ l ^ r ...) #'(expt l (: r ...))]
[(_ x) #'x]))
(: 1 + 4 ^ 2)
Uma linguagem
para criar linguagens
Um Lisp moderno
(foco em imutabilidade)
Novos dialetos de Lisp nos últimos 10 anos
By Ronie Uliana
Introdução ao Lisp usando Racket com ênfase em Inteligência Artificial