Вы находитесь на странице: 1из 10

Uma Aula Prtica sobre LISP

Siang Wun Song - Universidade de So Paulo - IME/USP

MAC 5710 - Estruturas de Dados - 2008

Siang Wun Song - Universidade de So Paulo - IME/USP

Uma Aula Prtica sobre LISP

Linguagem LISP
Surgiu no nal dos anos 50 - John McCarthy (MIT). Linguagem para processamento simblico. Muito usada em aplicaes em Inteligncia Articial. Outras aplicaes incluem AutoCad, Editor Emacs, etc. Linguagem funcional - LISP puro no possui atribuies (livre de efeitos colaterais). Lisp no compliado (cdigo fonte para cdigo objeto de mquina), mas sim interpretado por meio de um interpretador. Interpretador implementado usando estruturas de listas encadeadas. Coletor de lixo faz parte do sistema.
Siang Wun Song - Universidade de So Paulo - IME/USP Uma Aula Prtica sobre LISP

MuLISP

H muitos dialetos de LISP: Mac Lisp Franz Lisp Common Lisp Golden Lisp MuLisp, etc. Uma pgina contendo vrios sistemas LISP: http://magnum.ime.uerj.br/mpmelo/IME4701/2002-2.htm

Siang Wun Song - Universidade de So Paulo - IME/USP

Uma Aula Prtica sobre LISP

Linguagem Funcional

Aplicao de funo a seus argumentos, com a possibildiade de composio funcional. Uso intenso de recurso. LISP signica LISt Processor Dijkstra brincava dizendo: LISP a maneira mais elegante de disperdiar recursos :-) Outra brincadeira: LISP signica Lot of Irritating Stupid Parenthesis.

Siang Wun Song - Universidade de So Paulo - IME/USP

Uma Aula Prtica sobre LISP

MuLISP5.1

MuLISP foi desenvolvido nos anos 80 para o sistema DOS. A partir de MuLISP a empresa Soft Warehouse de Honolulu desenvolveu o MuMath cujo sucessor o sistema Derive, um sistema de lgebra computacional. MuLISP bem compacto. O cdigo ocupa apenas 38 Kbytes. Possui aritmtica de preciso ilimitada (como o nosso programa 1 do curso).

Siang Wun Song - Universidade de So Paulo - IME/USP

Uma Aula Prtica sobre LISP

Demonstrao MuLISP
No prompt do sistema DOS, tecle mulisp. O sinal de prompt do MuLISP o sinal de dlar $ Depois do prompt $ pode-se entrar uma funo seguida de argumentos, se houver. O interpretador MuLISP vai avaliar a funo e retornar o resultado da avaliao. Exemplos: $5 5 A funo constante 5 vai devolver o nmero 5. $ (+ 3 5) 8 O primeiro elemento da lista + interpretado como uma funo (soma), os demais elementos (3 e 5) so argumentos da funo. O MuLISP retorna o valor da soma.
Siang Wun Song - Universidade de So Paulo - IME/USP Uma Aula Prtica sobre LISP

Demonstrao MuLISP
$ (+ 3 5) ou (quote (+ 3 5)) (+ 3 5) O smbolo ou a funo quote faz com que o argumento em seguida seja tratado como um valor literal que, portanto, no avaliado. $ (+ 3 (- 10 2)) 11 Composio de funes possvel. $ (+ (* 5 2) (- 10 2)) 18 Mais composies de funes. $ (* 123456789 987654321) 121932631112635269 Preciso ilimitada: cada nmero armazenado como uma lista ligada de algarismos. (system) Termina o interpretador MuLISP e retorna-se ao DOS.
Siang Wun Song - Universidade de So Paulo - IME/USP Uma Aula Prtica sobre LISP

Demonstrao MuLISP
$ (zerop 9) nil A funo zerop testa se o argumento zero. Se sim retorna T caso contrrio retorna nil. $ (zerop (- 100 (+ 80 20))) T $ (sub1 60) 59 A funo sub1 subtrai um. $ (defun cubo (n) (* n n n)) cubo Defun serve para denir uma funo. Aps a denio o sistema retorna o nome da funo. De agora em diante, pode-se usar a funo denida. $ (cubo 2) 8
Siang Wun Song - Universidade de So Paulo - IME/USP Uma Aula Prtica sobre LISP

Demonstrao MuLISP
$ (defun fatorial (n) (cond ( (zerop n) 1) ( T (* n (fatorial (sub1 n)))) ) ) fatorial Cond uma condicional. Segindo Cond vm pares de funes. Avalia-se o primeiro elemento de cada par, sucessivamente, at se chegar a um valor no-nil. Entao o valor de Cond o valor do segundo elemento do par. $ (fatorial 5) 120 Experimente chamar fatorial com nmero bem grande. $ (rds doctor.lsp) doctor A funo rds l o programa escrito em MuLISP especicado pelo argumento e inicia a avaliao.
Siang Wun Song - Universidade de So Paulo - IME/USP Uma Aula Prtica sobre LISP

Prximo termo de uma sequncia

Este programa recebe uma sequncia de nmeros e tenta descobrir o prximo. Por ex: $ (nextterm (quote ( 1 2 3 4 5) )) vai produzir o nmero 6. Experimente outras sequncias.
Siang Wun Song - Universidade de So Paulo - IME/USP Uma Aula Prtica sobre LISP

Вам также может понравиться