Podcast
Questions and Answers
Qual é o propósito da declaração defpackage
em LISP?
Qual é o propósito da declaração defpackage
em LISP?
- Criar um novo arquivo de código.
- Inicializar variáveis globais.
- Carregar bibliotecas externas.
- Definir um novo pacote de funções. (correct)
O que é um package de default em LISP?
O que é um package de default em LISP?
- Um pacote que contém funções básicas de programação.
- Um pacote que pode ser carregado automaticamente a qualquer momento.
- Um pacote que não pode ser acessado diretamente.
- Um pacote que é utilizado por padrão para novos símbolos. (correct)
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?
- Com a declaração `load`.
- Com a declaração `use-package`.
- Com a declaração `in-package`. (correct)
- Com a declaração `define`.
Em qual linha deve estar a declaração in-package
no arquivo?
Em qual linha deve estar a declaração in-package
no arquivo?
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?
Qual função é utilizada para carregar um arquivo em LISP?
Qual função é utilizada para carregar um arquivo em LISP?
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
?
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
?
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?
O que caracteriza a estrutura de dados utilizada no jogo dos animais?
O que caracteriza a estrutura de dados utilizada 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?
Como deve o programa atualizar a estrutura de dados após a interação com o utilizador no jogo dos animais?
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?
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?
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'?
Qual é o propósito da função make-secret-keeper
?
Qual é o propósito da função make-secret-keeper
?
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?
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?
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
?
O que o comando (funcall secret-1 'change-password 'wrong 'newpass)
retorna?
O que o comando (funcall secret-1 'change-password 'wrong 'newpass)
retorna?
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)
?
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á?
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?
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'?
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?
O que faz a função use-package?
O que faz a função use-package?
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?
Para qual propósito se utiliza a função unexport?
Para qual propósito se utiliza a função unexport?
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?
Qual é o efeito do uso da função unuse-package?
Qual é o efeito do uso da função unuse-package?
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?
O que representa a 'exported symbol list' em um package?
O que representa a 'exported symbol list' em um package?
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?
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?
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)))?
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?
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?
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))?
Qual é o resultado da chamada (mapcar #'list '(1 2 3 4 5))?
Qual é o resultado da chamada (mapcar #'list '(1 2 3 4 5))?
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))?
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?
Qual é a finalidade da função 'transposta' em um contexto de matrizes?
Qual é a finalidade da função 'transposta' em um contexto de matrizes?
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?
Flashcards
Packages em LISP
Packages em LISP
Namespaces (espaços de nomes) implementados em LISP para organizar símbolos (variáveis e funções).
Package Default
Package Default
O package CL-User é o package padrão (padrão) em LISP.
Defpackage
Defpackage
Função em LISP para definir um nuovo package.
In-package
In-package
Signup and view all the flashcards
Alfabeta
Alfabeta
Signup and view all the flashcards
Sucessores
Sucessores
Signup and view all the flashcards
Jogar
Jogar
Signup and view all the flashcards
Ficheiro LISP
Ficheiro LISP
Signup and view all the flashcards
Pauta de alunos
Pauta de alunos
Signup and view all the flashcards
Adicionar alunos à turma
Adicionar alunos à turma
Signup and view all the flashcards
Modificar a nota de um aluno
Modificar a nota de um aluno
Signup and view all the flashcards
Jogo dos Animais
Jogo dos Animais
Signup and view all the flashcards
Árvore de decisão binária
Árvore de decisão binária
Signup and view all the flashcards
Opções do Defpackage
Opções do Defpackage
Signup and view all the flashcards
:use
:use
Signup and view all the flashcards
:export
:export
Signup and view all the flashcards
Lista de símbolos exportados
Lista de símbolos exportados
Signup and view all the flashcards
Exportação e Importação
Exportação e Importação
Signup and view all the flashcards
Uso Padrão
Uso Padrão
Signup and view all the flashcards
Importar símbolos
Importar símbolos
Signup and view all the flashcards
Ocultação de símbolos
Ocultação de símbolos
Signup and view all the flashcards
Importar com sombra
Importar com sombra
Signup and view all the flashcards
Função Apply
Função Apply
Signup and view all the flashcards
Função Mapcar
Função Mapcar
Signup and view all the flashcards
Função Cond
Função Cond
Signup and view all the flashcards
Função Second
Função Second
Signup and view all the flashcards
Função Cddr
Função Cddr
Signup and view all the flashcards
Função Maiores50
Função Maiores50
Signup and view all the flashcards
Matrizes Bidimensionais
Matrizes Bidimensionais
Signup and view all the flashcards
Multiplicação de Matrizes
Multiplicação de Matrizes
Signup and view all the flashcards
Transposta de Matriz
Transposta de Matriz
Signup and view all the flashcards
Função Recursiva
Função Recursiva
Signup and view all the flashcards
Função make-secret-keeper
Função make-secret-keeper
Signup and view all the flashcards
Parâmetro operation
(em make-secret-keeper
)
Parâmetro operation
(em make-secret-keeper
)
Signup and view all the flashcards
Parâmetros old-passwd
e new-passwd
(em change-password
)
Parâmetros old-passwd
e new-passwd
(em change-password
)
Signup and view all the flashcards
Parâmetro passwd
(em set-secret
e get-secret
)
Parâmetro passwd
(em set-secret
e get-secret
)
Signup and view all the flashcards
Parâmetro new-secret
(em set-secret
)
Parâmetro new-secret
(em set-secret
)
Signup and view all the flashcards
Retorno de make-secret-keeper
Retorno de make-secret-keeper
Signup and view all the flashcards
funcall
funcall
Signup and view all the flashcards
Variáveis secret-1
e secret-2
Variáveis secret-1
e secret-2
Signup and view all the flashcards
Rodar uma lista para a esquerda
Rodar uma lista para a esquerda
Signup and view all the flashcards
Raízes reais da equação de 2º grau
Raízes reais da equação de 2º grau
Signup and view all the flashcards
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.