{"id":10,"date":"2008-06-17T01:38:57","date_gmt":"2008-06-16T23:38:57","guid":{"rendered":"http:\/\/www.blackhats.es\/wordpress\/?p=10"},"modified":"2022-08-20T18:26:36","modified_gmt":"2022-08-20T16:26:36","slug":"scheme-common-y-emacs-lisp","status":"publish","type":"post","link":"https:\/\/www.blackhats.es\/wordpress\/?p=10","title":{"rendered":"Scheme, common y emacs lisp"},"content":{"rendered":"<p>Antes de continuar explicando keystrokes m\u00e1s avanzados creo que es importante tener un m\u00ednimo de cultura general de Lisp (list processing), ya que est\u00e1 totalmente relacionado con Emacs (m\u00e1s de un 75% est\u00e1 escrito en lisp, algo m\u00e1s de un 23% en c, y el resto en lenguajes como sh, perl, awk, python y dem\u00e1s).<\/p>\n<p>En primer lugar decir que Lisp es un lenguaje de programaci\u00f3n multiparadigma, de alto nivel, declarativo, funcional, orientado a objetos y con 50 a\u00f1os de hist\u00f3ria. La potencia de lisp es mucho mayor de la que lo gente se piensa y aunque tiene relaci\u00f3n con la IA (Inteligencia Artificial) se usa y se ha usado para much\u00edsimas cosas m\u00e1s, como estudiar los paradigmas de los lenguajes de programaci\u00f3n del futuro.<\/p>\n<p>Lisp tiene 3 dialectos principales hoy en dia (aunque existen m\u00e1s), \u00e9stos son Scheme, Common lisp y Emacs lisp.<\/p>\n<ul>\n<li><strong>Scheme:<\/strong> la filosof\u00eda de Scheme es minimalista. Scheme proporciona un n\u00famero muy reducido de primitivas, construyendo el resto a partir de este reducido n\u00famero de abstracciones. El est\u00e1ndar (R5RS) tan s\u00f3lo ocupa unas 50 p\u00e1ginas y se puede descargar de la p\u00e1gina de schemers.org <a title=\"r5rs\" href=\"http:\/\/schemers.org\/Documents\/Standards\/R5RS\/r5rs.pdf\">(http:\/\/schemers.org\/Documents\/Standards\/R5RS\/r5rs.pdf<\/a>).<\/li>\n<li><strong>Common lisp<\/strong>: por otro lado tenemos common lisp, \u00e9l \u00edndice de las especificaciones de \u00e9ste es tan grande como todas las especificaciones de scheme, por lo lo que posee un gran n\u00famero de primitivas. La especificaci\u00f3n y referencia m\u00e1s cercana es la CLtL (<a href=\"www.cs.cmu.edu\/Groups\/AI\/html\/cltl\/cltl2.html \"><span class=\"a\">www.cs.cmu.edu\/Groups\/AI\/html\/cltl\/cltl2.html<\/span><\/a>).<\/li>\n<li><strong>Emacs lisp:<\/strong> por \u00faltimo tenemos Emacs lisp, \u00e9ste dialecto fue escrito pensando u orientado para el entorno Emacs. El juego de primitivas que ofrece no es tan peque\u00f1o como el de Scheme, pero tan poco tan grande como el de Common lisp. Su n\u00famero de primitivas tambi\u00e9n es reducido, lo que ocurre es que el est\u00e1ndar tambi\u00e9n define la biblioteca, que se construye con el juego de primitivas reducidas. La mejor referencia se encuentra en la web de gnu (<a href=\"http:\/\/www.gnu.org\/software\/emacs\/manual\/elisp.html\">http:\/\/www.gnu.org\/software\/emacs\/manual\/elisp.html<\/a>).<\/li>\n<\/ul>\n<p>Por supuesto nuestro entorno emacs tiene un int\u00e9rprete de lisp (emacs lisp) escritro en c, que es la base de toda la aplicaci\u00f3n y del resto de funcionalidades que se cargan. Por lo tanto podemos decir que podemos interpretar c\u00f3digo Lisp desde emacs (y se hace constantemente). Para ello tenemos distintas posibilidades:<\/p>\n<ul>\n<li><strong>M-x run-scheme<\/strong> : podremos comenzar a interpretar scheme.<\/li>\n<li><strong>M-x run-lisp<\/strong> : podremos comenzar a interpretar common lisp.<\/li>\n<li><strong>M-x eval-expression<\/strong> \u00f3 <strong>M-:<\/strong> : podremos comenzar a interpretar emacs lisp desde el minibuffer.<\/li>\n<li><strong>C-x C-e<\/strong> : para interpretar emacs lisp escrito en alg\u00fan buffer (\u00fatil cuando no es tan corto el c\u00f3digo).<\/li>\n<\/ul>\n<p>Tambi\u00e9n podemos evaluar c\u00f3digo emacs lisp usando <strong>M-x eval-buffer<\/strong> si queremos evaluar un buffer entero en dicho int\u00e9rprete o bien <strong>M-x eval-region<\/strong> si lo que queremos es que interprete una regi\u00f3n. Debemos tener instalados en nuestro sistema los int\u00e9rpretes de scheme y common para poder evaluar expresiones de estos, el de emacs lisp, ya viene con GNU\/Emacs.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignright\" style=\"vertical-align: bottom; float: right;\" src=\"http:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/3\/39\/Lambda_lc.svg\/100px-Lambda_lc.svg.png\" alt=\"lambda\" width=\"100\" height=\"100\" \/><\/p>\n<p style=\"text-align: left;\">Por \u00faltimo recomendar este magn\u00edfico video (<a title=\"taller de lisp\" href=\"http:\/\/video.google.com\/videoplay?docid=4468848142359155588&amp;q=taller+de+lisp&amp;ei=KepWSLKaAZL-igKc68n5Dg\">Taller de lisp<\/a>) tambi\u00e9n incrustado al final de \u00e9ste post, de David Arroyo (los primeros 24 minutos sobre la hist\u00f3ria de Lisp) y Jos\u00e9 E. Marchesi (a partir del minuto 25, sobre como se implementa Lisp de forma interna).<\/p>\n<p style=\"text-align: center;\"><object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"425\" height=\"326\" codebase=\"http:\/\/download.macromedia.com\/pub\/shockwave\/cabs\/flash\/swflash.cab#version=6,0,40,0\"><param name=\"src\" value=\"http:\/\/video.google.com\/googleplayer.swf?docId=4468848142359155588&amp;q=taller+de+lisp&amp;ei=KepWSLKaAZL-igKc68n5Dg#&amp;hl=en\" \/><embed type=\"application\/x-shockwave-flash\" width=\"425\" height=\"326\" src=\"http:\/\/video.google.com\/googleplayer.swf?docId=4468848142359155588&amp;q=taller+de+lisp&amp;ei=KepWSLKaAZL-igKc68n5Dg#&amp;hl=en\"><\/embed><\/object><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Antes de continuar explicando keystrokes m\u00e1s avanzados creo que es importante tener un m\u00ednimo de cultura general de Lisp (list processing), ya que est\u00e1 totalmente relacionado con Emacs (m\u00e1s de un 75% est\u00e1 escrito en lisp, algo m\u00e1s de un 23% en c, y el resto en lenguajes como sh, perl, awk, python y dem\u00e1s). [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[14],"class_list":["post-10","post","type-post","status-publish","format-standard","hentry","category-intro","tag-taller-de-lisp-emacs-emacs-lisp-elisp-common-scheme"],"_links":{"self":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/10"}],"collection":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10"}],"version-history":[{"count":1,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/10\/revisions"}],"predecessor-version":[{"id":816,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/10\/revisions\/816"}],"wp:attachment":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}