Podcast
Questions and Answers
Qual é o propósito da declaração defpackage
em LISP?
Qual é o propósito da declaração defpackage
em LISP?
O que é um package de default em LISP?
O que é um package de default em LISP?
Como é indicado o package em que os símbolos são definidos dentro de um arquivo?
Como é indicado o package em que os símbolos são definidos dentro de um arquivo?
Em qual linha deve estar a declaração in-package
no arquivo?
Em qual linha deve estar a declaração in-package
no arquivo?
Signup and view all the answers
Qual das seguintes opções é um exemplo correto de definição de packages?
Qual das seguintes opções é um exemplo correto de definição de packages?
Signup and view all the answers
Qual função é utilizada para carregar um arquivo em LISP?
Qual função é utilizada para carregar um arquivo em LISP?
Signup and view all the answers
Qual é a correta relação entre os packages Common-LISP
e Common-LISP-User
?
Qual é a correta relação entre os packages Common-LISP
e Common-LISP-User
?
Signup and view all the answers
Qual é uma das recomendações para a organização de arquivos com in-package
?
Qual é uma das recomendações para a organização de arquivos com in-package
?
Signup and view all the answers
Qual é uma funcionalidade que o programa de gestão da pauta deve ter?
Qual é uma funcionalidade que o programa de gestão da pauta deve ter?
Signup and view all the answers
O que caracteriza a estrutura de dados utilizada no jogo dos animais?
O que caracteriza a estrutura de dados utilizada no jogo dos animais?
Signup and view all the answers
Como deve o programa atualizar a estrutura de dados após a interação com o utilizador no jogo dos animais?
Como deve o programa atualizar a estrutura de dados após a interação com o utilizador no jogo dos animais?
Signup and view all the answers
Qual é a representação inicial da estrutura de dados para o jogo dos animais?
Qual é a representação inicial da estrutura de dados para o jogo dos animais?
Signup and view all the answers
Qual é uma maneira de os alunos serem adicionados à turma no programa de gestão?
Qual é uma maneira de os alunos serem adicionados à turma no programa de gestão?
Signup and view all the answers
Qual a saída do comando (funcall secret-1 'get-secret 'valentine)
após set-password
ter sido definido como 'valentine'?
Qual a saída do comando (funcall secret-1 'get-secret 'valentine)
após set-password
ter sido definido como 'valentine'?
Signup and view all the answers
Qual é o propósito da função make-secret-keeper
?
Qual é o propósito da função make-secret-keeper
?
Signup and view all the answers
Qual a resposta do comando (funcall secret-2 'set-secret 'valentine 'mysterious)
se a senha 'valentine' não foi definida?
Qual a resposta do comando (funcall secret-2 'set-secret 'valentine 'mysterious)
se a senha 'valentine' não foi definida?
Signup and view all the answers
O que acontece se set-password
for chamado novamente antes de definir uma nova senha?
O que acontece se set-password
for chamado novamente antes de definir uma nova senha?
Signup and view all the answers
Qual é a função do parâmetro operation
na função anônima retornada por make-secret-keeper
?
Qual é a função do parâmetro operation
na função anônima retornada por make-secret-keeper
?
Signup and view all the answers
O que o comando (funcall secret-1 'change-password 'wrong 'newpass)
retorna?
O que o comando (funcall secret-1 'change-password 'wrong 'newpass)
retorna?
Signup and view all the answers
Qual será a saída do comando (funcall secret-1 'set-secret 'unauthorized 'secret)
?
Qual será a saída do comando (funcall secret-1 'set-secret 'unauthorized 'secret)
?
Signup and view all the answers
Se secret-1
já tem uma senha definida, o que o comando (funcall secret-1 'set-password 'newpassword)
retornará?
Se secret-1
já tem uma senha definida, o que o comando (funcall secret-1 'set-password 'newpassword)
retornará?
Signup and view all the answers
O que é retornado quando (funcall secret-2 'get-secret 'bloody)
é executado após set-secret
ser chamado com a senha correta?
O que é retornado quando (funcall secret-2 'get-secret 'bloody)
é executado após set-secret
ser chamado com a senha correta?
Signup and view all the answers
Qual comando seria utilizado para alterar a senha para 'novaSenha' na secret-2
após previamente definir a senha como 'bloody'?
Qual comando seria utilizado para alterar a senha para 'novaSenha' na secret-2
após previamente definir a senha como 'bloody'?
Signup and view all the answers
Qual é a função do parâmetro :export na definição de um package?
Qual é a função do parâmetro :export na definição de um package?
Signup and view all the answers
O que faz a função use-package?
O que faz a função use-package?
Signup and view all the answers
Qual dos seguintes parâmetros é utilizado para importar símbolos de outros packages na definição de um package?
Qual dos seguintes parâmetros é utilizado para importar símbolos de outros packages na definição de um package?
Signup and view all the answers
Para qual propósito se utiliza a função unexport?
Para qual propósito se utiliza a função unexport?
Signup and view all the answers
O que significa o parâmetro :use na definição de um package?
O que significa o parâmetro :use na definição de um package?
Signup and view all the answers
Qual é o efeito do uso da função unuse-package?
Qual é o efeito do uso da função unuse-package?
Signup and view all the answers
Qual dos seguintes elementos não é uma opção válidas na definição de um package?
Qual dos seguintes elementos não é uma opção válidas na definição de um package?
Signup and view all the answers
O que representa a 'exported symbol list' em um package?
O que representa a 'exported symbol list' em um package?
Signup and view all the answers
Qual é o objetivo da função :shadow na definição de um package?
Qual é o objetivo da função :shadow na definição de um package?
Signup and view all the answers
O que ocorre se nenhum valor for dado para o parâmetro :use na definição de um package?
O que ocorre se nenhum valor for dado para o parâmetro :use na definição de um package?
Signup and view all the answers
Qual é o resultado da chamada da função (maiores50 '((antonio 51 PT)(brad 34 UK) (charles 77 FR)))?
Qual é o resultado da chamada da função (maiores50 '((antonio 51 PT)(brad 34 UK) (charles 77 FR)))?
Signup and view all the answers
O que a função (apply #'append '((a) (b) nil (c) nil nil (d))) retorna?
O que a função (apply #'append '((a) (b) nil (c) nil nil (d))) retorna?
Signup and view all the answers
Qual é o comportamento da função definida como (lambda (pessoa) (cond ((> (second pessoa) 50) (cddr pessoa))) (t nil)) neste contexto?
Qual é o comportamento da função definida como (lambda (pessoa) (cond ((> (second pessoa) 50) (cddr pessoa))) (t nil)) neste contexto?
Signup and view all the answers
Para que serve a função mapcar no exemplo (mapcar #'1+ '(1 2 3 4 5))?
Para que serve a função mapcar no exemplo (mapcar #'1+ '(1 2 3 4 5))?
Signup and view all the answers
Qual é o resultado da chamada (mapcar #'list '(1 2 3 4 5))?
Qual é o resultado da chamada (mapcar #'list '(1 2 3 4 5))?
Signup and view all the answers
O que a função mapcar retorna quando utilizada como (mapcar #'list '(1 2 3 4 5) '(a b c))?
O que a função mapcar retorna quando utilizada como (mapcar #'list '(1 2 3 4 5) '(a b c))?
Signup and view all the answers
Qual das seguintes opções descreve corretamente a função 'defun multimap' para multiplicar duas matrizes?
Qual das seguintes opções descreve corretamente a função 'defun multimap' para multiplicar duas matrizes?
Signup and view all the answers
Qual é a finalidade da função 'transposta' em um contexto de matrizes?
Qual é a finalidade da função 'transposta' em um contexto de matrizes?
Signup and view all the answers
Qual é a implementação correta para somar 2 unidades a todos os elementos de uma lista de números?
Qual é a implementação correta para somar 2 unidades a todos os elementos de uma lista de números?
Signup and view all the answers
Study Notes
Introdução à Inteligência Artificial (IA)
- A inteligência artificial (IA) não possui uma definição globalmente aceite.
- Aspectos importantes a considerar na IA incluem a capacidade de resolver problemas, utilizar conhecimentos (raciocínio) e aprender.
- O conceito de QI (quociente de inteligência) não é uma medida adequada para a IA.
- O xadrez representava antes uma forma de determinar inteligência, mas atualmente, máquinas superam os campeões mundiais.
Definição de Trabalho
- Não existe uma definição globalmente aceite para a IA.
- Elaine Rich definiu a IA como o estudo de como fazer computadores realizarem tarefas nas quais as pessoas são melhores.
- Já houve momentos em que as pessoas eram mais capazes que as máquinas em operações aritméticas.
Nascimento da IA
- A designação "Inteligência Artificial" foi inventada em 1956.
- Foi numa conferência realizada em "Dartmouth College", nos EUA.
- Os principais percursores incluem John McCarthy (LISP, 1959), Marvin Minsky, Seymour Papert (Percepção, 1969), Allen Newell (Logic Theorist, 1956), Arthur Samuel (Teoria de Jogos, Damas, 1963) e Herbert Simon (Racionalidade Limitada, Prémio Nobel).
Paradigma Funcional
- As funções são consideradas entidades de primeira classe em linguagens funcionais, podendo ser passadas como argumentos ou retornadas por outras funções.
- As funções de ordem superior são comumente suportadas.
- O paradigma funcional caracteriza-se pela ausência de efeitos colaterais.
- O cálculo lambda é a base da programação funcional.
Cálculo Lambda
- Um modelo de computação universal baseado na lógica matemática.
- O cálculo lambda permite expressar a computação através da abstração de funções.
- É utilizado para modelar e computar funções.
Conceitos Básicos
- A revisão de conceitos de compilação vs. interpretação, gestão de memória (heap vs. stack) e tipos de dados é crucial para compreender a implementação da IA.
- Devem ser consideradas as vantagens e desvantagens de cada abordagem.
- Tipos de dados estaticos vs dinamicos.
Compilação vs Interpretação
- Compilação: Conversão da linguagem do programa para linguagem de máquina antes da execução, mas tem dependência da plataforma e recompilação para novos testes.
- Interpretação: Independência da plataforma usada para execução, o que torna relevante para testes, pois permite a criacao e instanciação de entidades à medida que programa é executado.
Características de Linguagens Interpretadas Reflexivas
- Baseia-se num REPL, que permite fazer testes incrementais rápidos.
- Trata dados como se fossem programas, permitindo construir código em tempo de execução.
Gestão de Memória: Stack vs Heap
- Stack: Seguindo a disciplina LIFO, guarda as informações de invocação de função, incluindo código e variáveis, que têm um tamanho fixo e vida limitada, e é rápido.
- Heap: Possível problema com recursividade, fornece alocação dinâmica de memória para variáveis globais com tamanho variável e vida indefinida, que é mais lento.
Tipos de Dados
- Os tipos de dados definem a semântica e as regras de comportamento de um programa.
- Os tipos de dados básicos incluem inteiro, caracter, booleano e string.
- Os tipos têm vantagens associadas (ex. modularidade).
Variáveis
- As variáveis têm um tipo e um âmbito.
- O tempo de vida de uma variável abrange desde a sua criação até ao seu desaparecimento.
- O âmbito léxico é definido pelo código fonte, onde uma variável é referenciável dentro dos blocos internos.
- O âmbito dinâmico é associado ao encadeamento de invocação de funções durante a execução do programa.
Características Principais de LISP
- Linguagem functional, interpretada e reflexiva.
- Tipos de dados dinâmicos (late binding).
- Âmbito das variáveis baseado em escopo léxico.
- Estruturas de dados dinâmicas.
Gênese
- LISP (List Processing) foi criado em 1958.
LISP: Uma Linguagem Funcional
- Uma linguagem de programação com a função como elemento central.
- Enfatiza o estilo de programação de cima para baixo e também de baixo para cima, resultando em programas mais fáceis de ler e manutenção facilitada.
- Aplicabilidade importante no domínio da sua aplicação.
LISP Puro
- Um núcleo central da linguagem LISP, focado somente no cálculo lambda.
- Ausência de atribuição, sequenciação, pointer e estrutura de dados de armazenamento como memória heap.
Aspectos Básicos do Avaliador
- Invocações de funções usando notação prefixa.
- Mecanismos para evitar a avaliação de expressões como programas.
Tipos de Dados Elementares
- Incluem átomos (símbolos, números, inteiros, bignums, reais, booleanos, carateres e strings).
- São estruturas de dados dinâmicas usadas para dados e programas.
Literais de Números, Booleanos, Caracteres e Strings
- Exemplos de literais de números (inteiros, fixnums, bignums, reais) e valores booleanos.
- Inclui exemplos de literais de caracteres e strings.
- Tipos de dados numéricos (inteiro, real).
- Tipos booleanos (T, NIL).
- Tipos de caracteres (#\a, #\b).
- Tipos de strings ("uma string").
Símbolos
- Permitem representar variáveis e funções (estrutura de slots).
Listas
- Estruturas de dados dinâmicas.
- Baseadas em células Cons.
Tipo Abstrato Lista
- Os construtores incluem cons, car e cdr.
- Apresenta-se exemplos práticos de como trabalhar com listas complexas e os selectores.
Macros
- Formas especiais em LISP que extendem a sintaxe.
- Mecanismo de substituição léxica, sem uso de stack.
Notações BNF
- Uma notação formal para definir a sintaxe de uma linguagem.
Tipo Abstrato de Dados
- Modelo matemático definindo um tipo de dados pelas operações sobre seus valores.
- Um tipo abstrato de dado é independente da sua implementação.
Algumas Funções de Manipulação de Listas
- Apresenta-se funções como append, length, nth e reverse, com exemplos de uso.
Tipos Numéricos, Funções Aritméticas
- Tipos numéricos (real, inteiro).
- Principais operações aritméticas.
Operações com Números
- Exemplos de cálculo com números inteiros (ex.: divisão, resto da divisão, raiz quadrada).
- Detalhes sobre as diferenças entre as utilizações das funções.
- Operações matemáticas como divisão, resto da divisão e raiz quadrada são demonstradas, incluindo detalhes sobre suas possíveis exceções.
Algumas Funções Interessantes (Log, Exp e Random)
- As funções exp, log e random estão disponíveis.
Números Muito Grandes
- Dados numéricos com muitos dígitos são representados como lista de bytes (bignums).
Tipo Boolean/Predicados
- Operadores booleanos (ex.: igualdade, maior que, menor que...).
- Predicados booleanos (ex.: zero, impar, par, elemento de uma lista...).
Operadores Relacionais
- Operadores relacionais.
Tipo Boolean/Operadores Lógicos
- Operadores lógicos (ex.: e, ou, não).
- Resultados demonstrados nos predicados booleanos.
Detalhes dos Operadores Booleanos de Igualdade
- Detalhes sobre ref vs. valor em operadores de igualdade.
Exercícios
- Diversos exercícios para praticar os conceitos aprendidos.
- Detalhes sobre o trabalho com funções, recursividade e estruturas de dados.
- Apresentação de exercícios para praticar os conhecimentos adquiridos em aplicações de diferentes áreas.
Definição de Funções e Estruturas de Controlo
- Sintaxe para definir funções (defun) com parâmetros, descrição, e corpo.
Exemplos
- Desenvolve exemplos para ilustrar a sintaxe do LISP e suas aplicações.
- Exemplos práticos para calcular o quadrado de um número e a área de um círculo.
Funções e Símbolos de Funções
- Distinção entre funções nomeadas e funções anônimas (lambda).
Depuração (Debug)
- Métodos para depurar o código (ex.: trace, dribble).
Estruturas de Controlo no LISP Puro
- Sequenciação (não aplicada no LISP puro)
- Seleção (cond)
- Repetição (recursividade)
Seleção
- Sintaxe e exemplos de uso da estrutura de controlo cond.
- Apresenta-se exemplos usando a estrutura de controlo cond.
Macros (if e ecase).
- Sintaxe e exemplos do uso das macros if e ecase.
Exemplos (max e max4)
- Definição e exemplos de funções para encontrar o máximo de 2 e 4 números.
Recursividade
- Recursividade é abordada.
- Funcionalidades, estruturas e condição de paragem.
- Exemplos de funções recursivas.
Utilização do Stack
- Explicação visual da pilha de chamadas (stack) durante a execução recursiva.
Exercícios (pot, fib e A de Ackermann)
- Exercícios para definir funções recursivas.
Usar com extremo cuidado e apenas em casos excepcionais
- Sequenciação, iteração (do e dotimes).
- Conceitos com exemplos de uso.
Atribuição
- Funcoes para atribuicao de valores a variaveis (setq e setf).
Variáveis e Constantes Globais
- Definição e uso adequado de variáveis globais.
- Usar com extremo cuidado.
- Utilização da diretiva defparameter.
- Exemplos práticos.
Ligação de Valores a Variáveis em Ambientes Léxicos
- Funções LET e LET*, avaliando em sequencialmente ou em paralelo.
Exemplo LET
- Demonstração do uso de LET num exemplo para calcular perímetro e área de um círculo baseado no raio recebido.
Exemplo LET*
- Demonstração de uso num cálculo de raiz quadrada, baseado na amplitude dos valores de uma lista, caso esta amplitude seja maior que 10.
LET e LAMBDA
- Exemplos mostrando a similaridade entre as construções LET e LAMBDA.
Ligação de Funções a Variáveis em Ambientes Léxicos (flet e labels)
- Funcionamentos de flet e labels com demonstrações das suas utilizações.
Exemplos de Flet e Labels.
- Exemplos práticos, demonstrando os usos de flet e labels.
Closures
- Explicação do conceito de closures léxicas.
- Caracterísitcas e demonstrações de utilização.
- Âmbito léxico e dinâmico, e tipos de escopos.
Algumas Funções Destrutivas
- Funções destrutivas (incf, setf).
Outro Exemplo (segurança com passwords).
- Criar um exemplo prático para lidar com a segurança de uma aplicação com passwords.
Exemplo 2 (segurança com passwords).
- Uma abordagem mais segura para proteger os dados de uma aplicação com passwords.
Exercícios
- Exercícios práticos para demonstrar os conceitos.
- Exercícios práticas variam desde funções para manipular listas. Funções para tratamento de números (inteiros e reais) e para resolução de equações matemticas.
Functionais ou meta-funções
- Funções para manipulação de outras funções.
- eval, apply e funcall.
- Exemplos de funções.
Funções de Correspondência
- mapcar, maplist, mapc, mapl, mapcan, e mapcon.
- Demonstrando exemplos de uso.
Exemplo
- Função para listar os países das pessoas com mais de 50 anos, a partir de uma lista de dados.
Detalhes
- Detalhes e exemplos da função apply como ferramenta fundamental em LISP para processar diversas entradas e saídas.
Exercícios
- Exercícios para praticar a utilização de funções de correspondência e manipulação de dados complexos em LISP.
Ficheiros
- Funcionalidades de funções de ficheiros, como abrir, ler e escrever dados.
Keywords de open
- Opções disponíveis para configurar as funções de abertura de ficheiros em LISP.
Pathname
- Métodos para criar e trabalhar com nomes de caminhos de ficheiros usando a classe pathname.
Exemplo (cópia de linhas impares)
- Criar uma função que copia as linhas impares de um ficheiro ".txt" para um novo ficheiro, mantendo o mesmo nome (e extensão).
Exercícios
- Exercícios envolvendo a leitura/escrita de ficheiros.
- Escrita de programas para lidar com ficheiros e funções de leitura/escrita.
Packages
- Namespace problem, uma problemática de LISP que se resolve utilizando packages.
Possíveis Soluções
- As possibilidades para resolver problemas de Namespace.
- Uso de prefixos diferentes para símbolos em módulos distintos e a gestão dos nomes pelos programadores.
Exemplo Concreto
- Exemplo prático de um jogo de 2 jogadores baseado em simbolos.
Exemplo Esquemático
- Representação visual de um exemplo.
A Melhor Solução: Packages
- Utilização de packages para gestão de nomes em LISP.
- Um pacote é uma forma de organizar símbolos, e os pacotes predefinidos como CL, e CL-User.
Exemplo Simples de Utilização
- Exemplos práticos de definição e carga de packages.
Programas J1.lisp e J2.lisp
- Exemplos mostrando os programa de cada jogador, para um jogo entre dois jogadores.
Recomendações
- Recomendações para boas práticas na utilização de packages.
Definir Packages
- Utilização de defpackage para definição de pacotes.
Opções Principais
- Opções principais para configuração de pacotes em LISP (ex.: :use, :import-from, :export).
Export e Use-Package
- Mecanismos para importação e exportação de símbolos entre pacotes.
Shadowing
Mecanismo para gestão de simbolos com mesmo nome, sem conflitos.
Intern/Unintern
- Mecanismo para criar e remover símbolos dentro de um package.
Lista de Símbolos de um Package
- Macros para listagem dos símbolos de um pacote.
Exercícios
- Exercícios sobre diferentes funcionalidades do LISP envolvendo packages.
- Envolve funcionalidades dos packages com exemplos práticos de jogo entre dois jogadores.
Programas Completos
- Apresentação de exemplos de programas completos em LISP com foco em packages.
Tipos Abstratos de Dados
- Discussão de linguagem extensível do LISP e Vantagens.
Exemplo 1
- Exemplo prático com o tipo de dados "Turma".
- Inclui o tipo de dados "Aluno" necessário para o tipo "Turma".
Exercício 1
- Exercício para praticar a gestão de uma pauta de alunos em LISP numa aplicação prática.
Exemplo 2
- Abordagem baseada em árvore de decisão binária para um jogo.
Exercício 2 (Implementacão)
- Orientações sobre a criação do tipo abstrato dos dados, para a implementação da árvore binária do jogo.
Exercícios
- Exercícios adicionais (roda para esquerda, equação do segundo grau, Fibonacci, binary, hexadecimal) e exercicios adicionais sobre conjuntos.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.