Pergunta

Fui aprendendo Lisp para expandir meus horizontes, porque ouvi dizer que ele é usado em programação AI. Depois de fazer algumas explorar, eu ainda tenho que encontrar exemplos AI ou qualquer coisa na linguagem que tornaria mais inclinado para ele.

Foi Lisp usado no passado, porque ele estava disponível, ou há algo que eu estou ausente?

Foi útil?

Solução

Lisp foi usado no AI até o final da década de 1980. Na década de 80, porém, Common Lisp foi promovida ao mundo dos negócios como a "linguagem AI"; a folga forçada a maioria dos programadores de IA para C ++ por alguns anos. Estes dias, protótipos geralmente são escritos em uma linguagem dinâmica mais jovem (Perl, Python, Ruby, etc) e implementações de êxito da investigação é geralmente em C ou C ++ (às vezes Java).

Se você está curioso sobre os anos 70 ... bem, eu não estava lá. Mas eu acho que Lisp foi bem sucedido na pesquisa do AI por três razões (em ordem de importância):

  1. Lisp é uma excelente ferramenta de prototipagem. Foi o melhor para um tempo muito longo. Lisp ainda é grande a combater um problema que você não sabe como resolver ainda. Essa descrição caracteriza AI perfeitamente.
  2. Lisp suporta bem programação simbólica. Old AI também foi simbólica. Ele também foi o único a este respeito por um longo tempo.
  3. Lisp é muito poderoso. A distinção código / dados é mais fraco para que ele sente mais extensível do que outras línguas, porque as funções e macros parecido com o built-in coisas.

Eu não tenho de href="http://norvig.com/paip.html" rel="noreferrer"> Peter Norvig, mas é suposto ser uma boa maneira de aprender a programar algoritmos de IA em Lisp.

Disclaimer: Eu sou um estudante de graduação em linguística computacional. Eu sei que o subcampo da linguagem natural de processamento muito melhor do que os outros campos. Talvez Lisp é usado mais em outros subcampos.

Outras dicas

Lisp é usado para AI porque suporta a implementação de software que calcula com símbolos muito bem. Símbolos, expressões simbólicas e computação com aqueles está no cerne de Lisp.

áreas AI típicas para computação com símbolos eram / são: álgebra computacional, teoremas, sistemas de planejamento, diagnóstico, sistemas de reescrita, representação de conhecimento, as línguas de lógica, a tradução automática, sistemas especialistas, e mais

.

Em seguida, é nenhuma surpresa que muitos aplicativos famosos AI nestes domínios foram escritos em Lisp:

  • Macsyma como o primeiro sistema de álgebra computacional grande.
  • ACL2 como um provador de teoremas amplamente utilizado, por exemplo usado pela AMD.
  • DART como o planejador de logística utilizada durante a primeira guerra do Golfo pelos militares dos EUA. Esta aplicação Lisp sozinho é dito ter pago de volta para todos os investimentos dos EUA em pesquisa AI naquele momento.
  • SPIKE, a aplicação planejamento e programação para o Telescópio Espacial Hubble. Também é usado por vários outros telescópios de grande porte.
  • CYC, um dos maiores sistemas de software escritas. Representação e raciocínio no domínio do conhecimento do senso comum humano.
  • METAL, um dos sistemas de tradução de linguagem natural primeira usadas comercialmente.
  • O assistente do Autorizador American Express', que transações de cartão de verificações de crédito.

Existem milhares de aplicações nestas áreas que são escritos em Lisp. Muito comum para aqueles é que eles precisam de recursos especiais na área de processamento simbólico. Um implementos linguagens especiais que têm intérpretes especiais / compiladores nestes domínios no topo do Lisp. Lisp permite criar representações de dados e programas simbólicos e pode implementar todos os tipos de máquinas para manipular essas expressões (fórmulas matemáticas, fórmulas lógicas, planos, ...).

(Note-se que muitas outras linguagens de programação de propósito geral são usados ??em AI, também. Eu tentei responder por que especialmente Lisp é usado em AI.)

Uma das razões é que ele permite que você estenda a língua com construções específicas para seu domínio, tornando-se, efetivamente, uma linguagem específica de domínio. Esta técnica é incrivelmente poderoso, uma vez que permite raciocinar sobre o problema você está resolvendo, ao invés de sobre baralhar os bits.

Meu palpite sempre foi que, sendo uma linguagem funcional, não faz distinção entre o código e os dados. Tudo, incluindo definições de funções e chamadas de função pode ser tratado como listas e modificado como qualquer outra peça de dados.

, código de auto-modificando auto-inspecionar Então poderia ser escrito com facilidade.

Uma resposta possível é que AI é um conjunto de problemas muito difíceis, e Lisp é uma linguagem boa para resolver problemas difíceis, não apenas AI.

Quanto ao porquê isto é: macros, funções genéricas e introspecção rica permitir código conciso e fácil introdução de abstrações de domínio - é uma linguagem que você pode fazer mais poderoso. Para um monte de problemas que é desnecessário, e ele vem com seus próprios custos, mas para outros problemas que o poder é necessário para fazer qualquer progresso.

Eu acho que é errado pensar sobre isso em termos de única AI. Coisas como os efeitos AI-inverno e comerciais no Common Lisp estão distraindo se você está perguntando por que ele foi usado para AI, não porque não é frequentemente utilizado agora ...

De qualquer forma, eu acho que é porque a maioria do código AI era essencialmente código de pesquisa. Lisp é uma ótima linguagem para programação exploratória, para a implementação de algoritmos difíceis, para a auto-modificando e código muitas vezes modificado. Em outras palavras, para o código de pesquisa.

Eu uso lisp hoje para alguns dos meus códigos de pesquisa (matemática, processamento de sinal) porque é mais flexível e poderosa do que a maioria das linguagens enquanto ainda gerar código mais eficiente do que a maioria dos idiomas. Eu normalmente pode obter um desempenho dentro de um fator de +/- 2 de digamos c velocidade ++, mas eu posso implementar as coisas muito mais rápido, e lidar com a complexidade que me levaria muito mais tempo do que eu tenho se eu usasse c ++, Java, C #.

Isso está vagando fora do tópico embora. Eu acho que o código AI foi escrito principalmente em Lisp comum por um tempo, porque é uma abordagem poderosa para código de pesquisa. É ainda; mas como `algoritmos AI' tornou-se mais bem compreendido e explorado, partes deles eram muito mais fáceis de ensinar e uso, assim que apareceu em línguas sabor-de-ano em cursos de graduação. A partir daí, torna-se uma questão de que as pessoas já sabe, o que as bibliotecas estão disponíveis, e que funciona bem para grandes grupos.

Eu acho que uma grande razão foi a flexibilidade de listas como uma estrutura básica de dados.

no momento, ser capaz de transformá-los em todos os tipos de objetos compostos, e as coisas novas como passings mensagens e polimorfismo, tornou a linguagem de escolha; não especificamente para AI, mas para grandes, complexos e tarefas. especialmente quando eles estavam experimentando com conceitos.

Lembro-me de ouvir que, sendo uma linguagem funcional, Lisp foi uma escolha muito boa para a implementação de algoritmos recursivos. Ser capaz de rastrear uma árvore e trabalhar o seu caminho de volta é essencial quando se considera os processos decisórios (de passagem) e resultado final (nó folha).

Isto foi dito para mim durante um AI curso na universidade onde estudou Lisp.

Uma resposta mais cínica poderia ser "porque perdeu uma guerra política AI entre o Japão e os EUA na década de 1980". Há um divertido href="http://vanemden.wordpress.com/2010/08/21/who-killed-prolog/" blog que especula sobre o impacto da Quinta Geração Computer System desaparecimento na Prolog .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top