{"id":480,"date":"2013-05-09T09:33:57","date_gmt":"2013-05-09T07:33:57","guid":{"rendered":"http:\/\/www.blackhats.es\/wordpress\/?p=480"},"modified":"2022-08-20T18:25:37","modified_gmt":"2022-08-20T16:25:37","slug":"geiser-en-emacs-scheme","status":"publish","type":"post","link":"https:\/\/www.blackhats.es\/wordpress\/?p=480","title":{"rendered":"Geiser en emacs: scheme"},"content":{"rendered":"<p><a href=\"https:\/\/www.blackhats.es\/wordpress\/?attachment_id=482\" rel=\"attachment wp-att-482\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-482 alignleft\" alt=\"Racket_logo\" src=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/Racket_logo.png\" width=\"88\" height=\"85\" \/><\/a>\u00a0Hace un tiempo comentabamos los distintos principales <strong><a href=\"https:\/\/www.blackhats.es\/wordpress\/?p=10\" target=\"_blank\" rel=\"noopener\">dialectos<\/a><\/strong> que existen en lisp y la forma de evaluar codigo. Sin embargo hoy nos centraremos en scheme, que en su dia ya explicamos como evaluar lisp. Principalmente se puede hacer de 2 formas, evaluando el buffer o expresiones escritas en el buffer, o bien de forma interactiva. Para evaluar en el buffer directamente podemos hacer: <strong>C-x C-e<\/strong>. Sin embargo, si queremos realizarlo de forma interactiva podemos instalar y configurar Geiser.<\/p>\n<p>Primero descargamos <strong><a href=\"http:\/\/www.nongnu.org\/geiser\/\" target=\"_blank\" rel=\"noopener\">Geiser<\/a><\/strong>, que no es mas que un wrapper para el compilador o compiladores de scheme:<\/p>\n<p style=\"padding-left: 30px;\">$ <strong>git clone git:\/\/git.sv.gnu.org\/geiser.git<\/strong><\/p>\n<p>Tambien debemos instalar el compilador en si mismo, generalmente tenemos 2 variantes, <a href=\"http:\/\/www.racket-lang.org\/\" target=\"_blank\" rel=\"noopener\">racket<\/a> y <a href=\"http:\/\/www.gnu.org\/software\/guile\/\" target=\"_blank\" rel=\"noopener\">guile<\/a>. Las diferencias entre estos dos interpretes y compiladores se pueden encontrar en sus web oficiales. En mi caso uso Racket, anteriormente llamado PLT Scheme. La plataforma provee de la implementacion de racket language, incluyendo un sofisticado sistema run-time, diferentes bibliotecas, un compilador JIT, etc. Se provee del entorno llamado DrRacket (anteriormente llamado DrScheme) que esta escrito en racket en si mismo. Para instalar racket o guile hacemos lo siguiente:<\/p>\n<p style=\"padding-left: 30px;\"># <strong>apt-get install racket<\/strong><\/p>\n<p style=\"padding-left: 30px;\">o<\/p>\n<p style=\"padding-left: 30px;\"># <strong>apt-get install guile-2.0<\/strong><\/p>\n<p>Debemos anadir la siguiente configuracion a nuestro .emacs (en mi caso yo uso racket):<\/p>\n<p style=\"padding-left: 30px;\"><em>(load-file \u00ab~\/geiser\/elisp\/geiser.el\u00bb)<\/em><br \/>\n<em>(setq geiser-racket-binary \u00ab\/usr\/bin\/racket\u00bb)<\/em><\/p>\n<p>Ahora ya podemos lanzar <strong>M-x geiser<\/strong> y seleccionar seguidamente <strong>racket<\/strong>.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.blackhats.es\/wordpress\/?attachment_id=483\" rel=\"attachment wp-att-483\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-483\" alt=\"repls\" src=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/repls.png\" width=\"688\" height=\"324\" srcset=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/repls.png 688w, https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/repls-300x141.png 300w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">Racket y GNU\/Guile<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.blackhats.es\/wordpress\/?attachment_id=486\" rel=\"attachment wp-att-486\"><img loading=\"lazy\" decoding=\"async\" alt=\"repl-images\" src=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/repl-images.png\" width=\"574\" height=\"512\" \/><\/a><\/p>\n<p style=\"text-align: center;\">Un ejemplo de la potencia de racket<\/p>\n<p style=\"text-align: justify;\">Probemos algo de codigo de scheme:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.blackhats.es\/wordpress\/?attachment_id=481\" rel=\"attachment wp-att-481\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" alt=\"Selection_021\" src=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/Selection_021.png\" width=\"697\" height=\"462\" \/><\/a><\/p>\n<p>Ya lo tenemos listo, ahora ya podemos comenzar a jugar con scheme de manera interactiva dentro de emacs. Existe un <strong><a href=\"http:\/\/www.nongnu.org\/geiser\/geiser_5.html#Cheat-sheet\" target=\"_blank\" rel=\"noopener\">listado completo de keybindings para geiser. <\/a><\/strong>Sin embargo, podemos emplear el menu que trae emacs para ver y usar los keybindings mas importantes o frecuentes:<\/p>\n<p><a href=\"https:\/\/www.blackhats.es\/wordpress\/?attachment_id=485\" rel=\"attachment wp-att-485\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-485 aligncenter\" alt=\"geiser-mode\" src=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/geiser-mode.png\" width=\"284\" height=\"607\" srcset=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/geiser-mode.png 284w, https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/geiser-mode-140x300.png 140w\" sizes=\"(max-width: 284px) 100vw, 284px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Y esto es todo, si quereis realmente jugar y aprender con scheme, podeis comprar posiblemente uno de los mejores, sino el mejor libro para aprender; <strong><a href=\"https:\/\/www.blackhats.es\/wordpress\/wp-content\/uploads\/2013\/05\/little-schemer_2549_500.jpg\" target=\"_blank\" rel=\"noopener\">\u00abThe little schemer\u00bb<\/a><\/strong>. Anteriormente ya hablamos de un libro muy avanzado,; <strong><a href=\"https:\/\/www.blackhats.es\/wordpress\/?p=61\" target=\"_blank\" rel=\"noopener\">el SICP<\/a><\/strong>. Pero que realmente es un libro para aprender programacion en si, pero que usa scheme como lenguaje educacional.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0Hace un tiempo comentabamos los distintos principales dialectos que existen en lisp y la forma de evaluar codigo. Sin embargo hoy nos centraremos en scheme, que en su dia ya explicamos como evaluar lisp. Principalmente se puede hacer de 2 formas, evaluando el buffer o expresiones escritas en el buffer, o bien de forma interactiva. [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[256],"tags":[267,262,261,8,259,265,66,260,266,68,263,264],"class_list":["post-480","post","type-post","status-publish","format-standard","hentry","category-medium","tag-dialectos","tag-doctor-scheme","tag-drscheme","tag-emacs","tag-geiser","tag-guile","tag-lisp","tag-plt-scheme","tag-racket","tag-scheme","tag-schemer","tag-the-little-schemer"],"_links":{"self":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/480"}],"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=480"}],"version-history":[{"count":6,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/480\/revisions"}],"predecessor-version":[{"id":752,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/480\/revisions\/752"}],"wp:attachment":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}