LISP - Introdução. Existem vários dialectos de LISP: COMMON LISP (o mais sofisticado e mais utilizado) Outros: MAC LISP, INTERLISP, XLISP

Documentos relacionados
Introdução à Programação Funcional. Conteúdo

Common-Lisp (introdutório).

Programação Funcional. Programação Funcional LISP. Paradigma de programação baseado em Funções Matemáticas

Referências bibliograficas: * Paul Graham, Ansi Common Lisp, Prentice Hall, Livro com descrição da linguagem Common-Lisp.

Introdução à Programação Funcional

Programação Orientada a Objetos. Programação Funcional

Introdução à Programação Funcional

para facilitar o trabalho com listas listas Cell model Lista é representada através de uma lista de células

Exemplo: ; ver exemplo de aplicação abaixo com mapcar. ; retorna uma lista formada pelos elementos indicados. ; retorna o número de elementos na lista

Tipo de argumentos. valor. argumentos

Linguagens de Programação Funcional

CFAC: AutoLISP (II) - Cálculos, Variáveis e Listas

AutoLISP - II Cálculos, Variáveis e Listas. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

CFAC: AutoLISP (I) - Introdução

Instituto Superior Técnico Licenciatura em Arquitectura Desenho Assistido por Computador II Ano lectivo 2005/06, 2 ano

AutoLISP -II Cálculos, Variáveis e Listas

Uma Aula Prática sobre LISP

Abstração de dados. Pedro Kröger. 5 de outubro de Um índice bibliográco poderia ser armazenado dessa maneira:

Algoritmo de Dijkstra em LISP

Anexo A. Resumo dos principais procedimentos do Scheme

LINGUAGENS FORA DO PADRÃO DE MERCADO

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Introdução à Ciência da Computação (ICC) PROVA P2 Sexta-feira 1 de Junho de 2001

AutoLISP -I Introdução

Cadeira de Procura e Planeamento

AutoLISP - I Introdução. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

Universidade Estadual De Santa Cruz (UESC)

Programação Funcional

PLANEJAMENTO DE AULA ANUAL 2016 Série: 8º Ano A e B. Matéria (Arte Plástica e Teatro) 1-Feb 2-Feb 3-Feb 4-Feb 5-Feb

Programação e Computação para Arquitectura 2007/2008

Trabalho de Programação Funcional Linguagem Scheme

Exercícios para Fundamentos da Programação

Funções Geométricas, de Strings, de Listas e de Manipulação de Arquivos

Linguagens de programação funcional

Exercícios de Programação e Computação para Arquitectura. António Menezes Leitão

AMBIENTE DE PROGRAMAÇÃO PYTHON II

Inteligência Artificial

PROCURA E PLANEAMENTO

AutoLISP -VII Funções Geométricas, de Strings, de Listas e de Manipulação de Arquivos

Linguagens de Programação Aula 13

Inteligência Artificial Taguspark

Algoritmos de Ordenação em LISP

Linguagens de Programação

Linguagens de Programação

Programação Python. Nesta aula... 1 Programação. 2 Python. Operadores e Operandos Variáveis, Expressões, Instruções Funções Ciclos Comentários

Introdução à Programação / Programação I

Programação Funcional

Inteligência Artificial

Conceitos de Linguagem de Programação - 2

INTRODUÇÃO AO SCILAB

Fundamentos de Programação

Laboratório de Programação 1 Aula 04

Espaço de Tipos. Amarração Tipo. Amarração Valor. Amarração Localização. Amarração Nome. Objeto de Dado

Informações. Programação Funcional. Por que um curso de programação funcional? O que é Programação Funcional? Objetivos da programação funcional

Resolução de 8-Puzzle com A* em LISP

IMPLEMENTAÇÃO D0 DESENHO AUTOMÁTICO DE CILINDROS DE DUPLO EFEITO AUTOLISP CONCEPÇÃO E FABRICO ASSISTIDOS POR COMPUTADOR ANO LECTIVO

Desafios para as Empresas Portuguesas

Prof. Marcelo Azevedo Costa. Departamento de Engenharia de Produção Universidade Federal de Minas Gerais

AutoLISP -V Manipulação de entidades

Inteligência Artificial Alameda e Taguspark

Compiladores - Especificando Sintaxe

Linguagens de Programação

Programação I Aula 2 Apresentação da linguagem Python

Aula de hoje. Expressões. Expressões. Expressões. Exemplos. Programa em Python. SCC Introdução à Programação para Engenharias

Indice 1

Linguagem Haskell. Riocemar S. de Santana

Java Básico. Carga Horária: 32 horas. Pré-requisito: Lógica de Programação; JAVA. Conteúdo Programático

Programação I A Linguagem C. Prof. Carlos Alberto

Exercícios da cadeira de Inteligência Artificial. Helena Sofia Pinto João Cachopo Daniel Gonçalves Carlos Lopes António Inês Lynce Pedro Matos

Processamento da Informação Teoria Funções

Introdução à linguagem C

CONCEITOS BÁSICOS DE PROGRAMAÇÃO PYTHON

Linguagens de Programação. Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio

Informá(ca para as Ciências e Engenharias Versão : C (Engenharia Civil) Pedro Barahona 2016 / 17

Linguagens de Programação Funcional

Conceitos de Linguagens de Programação

Unidade 6: Ambiente de Programação Prof. Daniel Caetano

É a resposta à execução, sob demanda do operador, do seguinte comando CHM : DISPLAY-NSCLOG-FILECHAR

Inteligência Artificial

SCS Sistemas de Controle / Servomecanismos. Aula 01 Introdução ao software MATLAB

A máquina SECD. Pedro Vasconcelos. 20 de Fevereiro de 2014

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores

Versão em Português Clique Aqui English Version Click Here

= = = = = = = = = = = = = = = =

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

Versão em Português Clique Aqui English Version Click Here

Programação Funcional

Programação e Computação para Arquitectura 2010/2011

Introdução à Programação Aula 2 Introdução à linguagem Python

Introdução à linguagem C++

Unidade 6: Ambiente de Programação

Python e sua sintaxe LNCC UFRJ

1 TECNOLOGIA ELEMENTAR CAPÍTULO 3 E-books PCNA. Vol. 1 TECNOLOGIA ELEMENTAR CAPÍTULO 3 APRESENTANDO A LINGUAGEM C. Página 1

Programação para Internet II PHP Funções. Nuno Miguel Gil Fonseca

ALGORITMOS E ESTRUTURA DE DADOS

Exercícios da cadeira de Introdução à Programação

MC-102 Aula 02 Shell Interativa, Programa Básico, Variáveis, Atribuições, Tipos Simples. Instituto de Computação Unicamp

Listas generalizadas. SCC-202 Algoritmos e Estruturas de Dados I

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 201 Departamento de Informática Centro Tecnológico

Transcrição:

LISP - Introdução Linguagem de alto nível, criada por John McCarty em 1959, tendo em vista facilitar a programação de sistemas de raciocínio baseados em lógica Foi adoptada como linguagem principal em investigação em IA (1956). É uma das linguagens de alto nível com menos restrições de sintaxe O LISP foi originalmente desenhado para ser uma linguagem interpretada: Interface: Editor Interpretador Desenvolvimento de programas de forma incremental mais simples teste modular Desenvolvimento bottom-up Actualmente o código em LISP pode ser compilado Maior velocidade de execução Existem vários dialectos de LISP: COMMON LISP (o mais sofisticado e mais utilizado) Outros: MAC LISP, INTERLISP, XLISP É uma linguagem para manipulação de símbolos LISP é o acrónimo para LISt Processor Os programas podem ser tratados como dados Conceitos fundamentais: Símbolos (atoms) Listas Recursão Abstração Links interessantes: (sobre a linguagem, aplicações e software, bibliografia) www.lisp.org www.cons.org Implementações de Common Lisp gratuitas: clisp, allegro CL (versão reduzida).

Introdução: Interpretador CLISP Allegro Common Lisp Saír do LISP: (exit) :quit :exit Ajuda sobre comandos: :h :help Reset do interpretador :reset Interpretador: read-eval-print loop: >(+ 1 3 4) 10 >

Tipos Básicos de Informação Atomos e Listas ATOMOS a () Ana LISTAS 34 (a john 34 c3po) Átomos (expressões atómicas): >10 10 Sequências de caracteres Podem ser: números, caracteres e strings ou símbolos números, caracteres e strings: quando introduzidos, o resultado da avaliação é o próprio valor introduzido Números > 3.14 3.14 Caracteres: objectos começados por #\ >#\a #\a > 5/6 5/6 > #c(3 4) #c(3 4) >(+ #c( 3) 4) #c( 6 3) >#\A #\A (a) >5.0/6 Error: Attempt to take the value of the unbound variable `5.0/6'. [condition type: UNBOUND- VARIABLE] >#\newline #\newline Strings: delimitados por aspas > "Esta frase tem duas linhas "Esta frase tem duas linhas" > "hhgh\jjk3#vg" "hhghjjk3#vg" Não confundir #\A com a string A ou com o símbolo A

Tipos Básicos de Informação: Atomos / Símbolos Símbolos Print name Value Binding Property List Function binding Se não existir outra regra, o LISP avalia um símbolo devolvendo o seu valor > pi 3.14159653589793d0 > a Error: Attempt to take the value of the unbound variable `A'. [condition type: UNBOUND-VARIABLE] > (setq a 38) 38 > a 38 > (defun a (k) (princ k)) A >a 38 >(a 89) 89 89 > (setq alfabeto '(a b c d e f g h i j k l m n o p q r s t u v w x y z)) (A B C D E F G H I J...) >(setq alfabeto_s "abcdefghijklmnopqrstuvwxyz") "abcdefghijklmnopqrstuvwxyz" >9 9 >10 10 >my-age 10 >t T >nil NIL >() NIL NIL: é simultaneamente um átomo e uma lista

Tipos Básicos de Informação: Listas Lista: sequência de objectos (números, caracteres, strings, símbolos, listas, etc) separados por espaços em branco e delimitados por parentesis curvos Tem dois objectivos principais: armazena informação e chama funções definidas Pode ter um numero ilimitado de elementos e uma profundidade tão elevada quanto se queira Lista sem elementos (lista vazia): NIL ou () O lisp trata as listas como contendo o nome de uma função seguido dos argumentos (notação prefixa): (name-of-function first-argument second-argument...) >(+ 13 45) 60 >(setq my-age 9) 9 >(+ my-age (* my-age )) 7 >(- 6 4 9-1) -6 Algumas funções primitivas +, -, *, /, exp, expt, log, sqrt, sin, cos, tan, max, min. >(expt 3) 8

Avaliação de listas > (+ (/ 4 ) (* 4)) 10 Codigo / Codigo * 4 Codigo / 4 Codigo / Codigo * 4 Codigo * 8 Após a avaliação dos elementos da ista, o LISP aplica o function binding (codigo) do primeiro elemento da lista ao resultado da avaliação dos restantes elementos

Construtores de listas: cons, list e append Cons: acrescenta um elemento à frente da lista >(cons 1 nil) (1) >(cons 1 (cons nil)) (1 ) >(cons a (b c d)) Error: attempt to call `B' which is an undefined function. [condition type: UNDEFINED-FUNCTION] > (cons 'a '(1 3)) (A 1 3) > (cons '(a b) '(1 3)) ((A B) 1 3) > (cons '(1 3) 'a) ((1 3). A) List: toma os seus argumentos (ilimitado) e faz uma lista com eles: >(cons 'a (cons 'b (cons 'c nil))) (A B C) > (list 'a 'b 'c) (A B C) >(list 1 4 5) (1 4 5) >(list (cons 6 nil) (list 3 6 989)) ((6) (3 6 989)) > (list 'a) (A) > (list '(a)) ((A))

Constructores de listas: cons, list e append Append: tem como argumentos listas, acrescentado os elementos da segunda lista no final da primeira lista >(append '(a b) '(c d)) (a b c d) > (append '(a b) '(1 3)) (A B 1 3) > (append '((a b)) '(1 3)) ((A B) 1 3) > (setq list1 '(a b c d e f 1 3 4 5 6)) (A B C D E F 1 3 4 5 6) > (append (cdr list1) (carlist1)) (B C D E F 1 3 4 5 6. A) ;; NOTE: Notice the dot between the 6 and the A? ;; This is because (car list1) is not a list. > (append (cdr list1) (list (car list1))) (B C D E F 1 3 4 5 6 A) > (append (car list1) (cdr list1)) Error: A is not of type LIST. > (append (list (car list1)) (cdr list1)) (A B C D E F 1 3 4 5 6)

Evitar avaliação de listas: quote > '(1 3 4) (1 3 4) > (quote (1 3 4)) (1 3 4) >(setq months '("jan" "feb" "mar" "apr" "may" "jun" "jul" "aug" "sep" "oct" "nov" "dec")) ("jan" "feb" "mar" "apr" "may" "jun" "jul" "aug" "sep" "oct"...) >(nth5 months) "jun >'a a >(cons 'a '(b c d)) (a b c d) >(append '(a b) '(c d)) (a b c d) >(list 3 4) ( 3 4) >(list 'a '(a s d f)) (a (a s d f))

Selectores: car, first, rest, cdr >(first '(a s d f)) a >(car '(a s d f)) a >(first '((a s) d f)) (a s) >(rest '(a s d f)) (s d f) >(rest '((a s) d f)) (d f) >(rest '((a s) (d f)) ((d f)) >(setq a '(a s d f)) (a s d f) >(first a) a >(rest a) (s d f) >(first (resta)) s >(cddr a) (D F) >(cdddr a) (F) >(cadr a) S > (caddr a) D === (car (cdr a)) first, second, third

Mais funções e predicados >(setq a '(a s d f)) (a s d f) >(length '(1 3)) 3 >(length a) 5 >(length (append a a)) 10 >(length '(append a a)) 3 >(length (list a a)) >(atom'a) T >(atom a) NIL >(listp 'a) NIL >(listp a) T

Setq e Setf Setq é util para alterar valores de variáveis: >(setq my-age (+ my-age 1)) 11 >(setq a (cdr a)) (a s d f) Mas por vezes queremos alterar apenas parte de uma variável. Ex: >(setq words '(a list of words)) (A LIST OF WORDS) Alterar parte da lista: >(setq words (cons 'this (rest words))) (THIS LIST OF WORDS) Uso de setf: >(setf (first words) 'the) THE >words (THE LIST OF WORDS) >(setf (third words) 'is) IS >words (THE LIST IS WORDS) >(setf (rest words) '(game is up)) (GAME IS UP) >words (THE GAME IS UP)