Fiquei me perguntando quais recursos únicos posso aprender com o Scheme que me ajudariam a me tornar um programador melhor?
Tenho muita experiência em idiomas comuns e pretendo expandir meus horizontes e aprender sobre aspectos funcionais ausentes de outros idiomas. Eu estou familiarizado com fechamentos de javascript, expressões lambda de C # e queria saber o que posso focar em falta em outros idiomas? Além da sintaxe do Lisp, sinto o que vi até agora e já encontrei em outros idiomas.
O que é exclusivo do Scheme / Lisp que me ensinará algo novo?
functional-programming
lisp
scheme
bunglestink
fonte
fonte
Respostas:
Talvez a característica definidora mais importante do Lisp seja "Código como Dados". Você não terá essa experiência da mesma maneira com qualquer outro idioma. Em C #, o analógico mais próximo são as árvores de expressão.
É essa qualidade que faz do Lisp uma excelente linguagem para análise. É também a qualidade que motivou Paul Graham a dizer sobre o Lisp: "O incomum sobre o Lisp - de fato, a qualidade definidora do Lisp - é que ele pode ser escrito por si só". Embora os compiladores de hospedagem automática não sejam novidade, nenhum idioma o faz de maneira tão elegante quanto o Lisp.
A metaprogramação (algo em que o Lisp também se destaca) também é algo que vale a pena aprender.
Batendo as médias por Paul Graham
http://www.paulgraham.com/avg.html
fonte
Sim, isso ajudará você a pensar de forma recursiva. Eu o estudei (esquema) apenas por um mês ou mais em uma aula de linguagem de programação e isso me ajudou a evoluir a maneira de pensar e resolver problemas de programação.
É sempre valioso tentar outros paradigmas de programação; você volta atualizado para o mundo OO com novas idéias.
Não é a sintaxe, mas o raciocínio, é um ótimo exercício cerebral. Além da recursão e do uso interessante de listas, não há muito mais IMHO, mas vale a pena.
fonte
Continuação :
e tente implementar o operador ambíguo de McCarthy :
fonte
Eu posso pensar no seguinte:
Também acho que as linguagens lisp devem ser incríveis para definir linguagens específicas de domínio (DSL). É algo que você pode querer ler se ainda não o conhece.
fonte