{"id":5,"date":"2007-06-08T18:15:37","date_gmt":"2007-06-08T16:15:37","guid":{"rendered":"https:\/\/blogs.ua.es\/domingo\/2007\/06\/08\/scheme\/"},"modified":"2008-10-11T09:46:48","modified_gmt":"2008-10-11T07:46:48","slug":"scheme","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/domingo\/2007\/06\/08\/scheme\/","title":{"rendered":"Scheme"},"content":{"rendered":"<p>Dice Yukihiro Matsumoto que uno de los principios en los que se bas\u00f3 para crear el lenguaje de programaci\u00f3n <a href=\"http:\/\/www.ruby-lang.org\/\">Ruby<\/a> era el <em>principio de la m\u00ednima sorpresa<\/em>. Un lenguaje de programaci\u00f3n debe sorprender lo m\u00ednimo posible a los programadores que lo utilicen.<\/p>\n<p>Evidentemente, Matsumoto se refiere a los programadores aventajados del lenguaje. Un lenguaje que est\u00e1 aprendi\u00e9ndose siempre sorprende, y esas sorpresas sirven para que compruebes que no ten\u00edas claro alg\u00fan aspecto de su funcionamiento o de su sem\u00e1ntica. Como ejemplo de un lenguaje que <em>no cumple<\/em> el principio de la m\u00ednima sorpresa, Matsumoto cita al C++, en un ingenioso y agudo comentario:<\/p>\n<blockquote><p><em>I was a C++ programmer before I started designing Ruby. I programmed in C++ exclusively for two or three years. And after two years of C++ programming, it still surprises me.<\/em><\/p><\/blockquote>\n<p>Todo esto viene al hilo del lenguaje que quer\u00eda presentar en este comentario. No es Ruby (lo dejamos para otro d\u00eda), sino Scheme. En lo que se refiere al principio de m\u00ednima sorpresa, apostar\u00eda a que Scheme gana a cualquier otro. Incluso ganar\u00eda el concurso al lenguaje m\u00e1s aburrido si no fuera por la recursi\u00f3n, por <em>lambda<\/em> y por su historia.<\/p>\n<p><!--more--><\/p>\n<p>Scheme es un dialecto del Lisp, el m\u00edtico lenguaje dise\u00f1ado por John McCarthy en 1956 (en el MIT Artificial Intelligence Project), cansado de utilizar el lenguaje m\u00e1quina para programar el computador <a href=\"http:\/\/www.columbia.edu\/acis\/history\/704.html\">IBM 704<\/a>. Lisp se convirti\u00f3 pronto en el lenguaje preferido de los investigadores en Inteligencia Artifical. La facilidad de su sintaxis y de su sem\u00e1ntica hizo proliferar distintas implementaciones de int\u00e9rpretes y, en un tiempo en que no exist\u00eda Internet, tambi\u00e9n gener\u00f3 numerosas variantes y dialectos del lenguaje. Scheme es uno de los dialectos del Lisp que ha sobrevivido hasta la actualidad (junto al Golden Common Lisp). Scheme es muy popular en facultades y escuelas de Inform\u00e1tica en Estados Unidos y, en bastantes de ellas, es el lenguaje escogido para introducir a los estudiantes en el mundo de la programaci\u00f3n.<\/p>\n<p>Scheme (igual que Lisp) es un lenguaje interpretado. Uno de los int\u00e9rpretes m\u00e1s populares en la actualidad es <a href=\"http:\/\/www.plt-scheme.org\/software\/drscheme\/\">DrScheme<\/a>.<\/p>\n<p>Cuando abrimos el int\u00e9rprete aparece un <em>prompt<\/em> esperando que tecleemos alguna expresi\u00f3n. Las siguientes expresiones son ejemplos de expresiones de Scheme (y de lo que devuelve el int\u00e9rprete):<\/p>\n<p><code><br \/>\n&gt; 2<br \/>\n<em>2<\/em><br \/>\n&gt; (+ 2 5)<br \/>\n<em>7<\/em><br \/>\n&gt; (+ (* 2 3) (- 4 1))<br \/>\n<em>9<\/em><br \/>\n&gt; (define a 3)<br \/>\n&gt; (+ a 4)<br \/>\n<em>7<\/em><br \/>\n&gt; (define (cuadrado x)<br \/>\n(* x x))<br \/>\n&gt; (+ (cuadrado 3) (cuadrado 4))<br \/>\n<em>25<\/em><br \/>\n<\/code><\/p>\n<p>Scheme es un lenguaje ideal para aprender a programar por la sencillez de su sintaxis y su sem\u00e1ntica. De hecho, en Estados Unidos se utiliza para iniciar a la programaci\u00f3n en educaci\u00f3n secundaria (ver el proyecto <a href=\"http:\/\/www.teach-scheme.org\/\">Teach Scheme<\/a>). En la ense\u00f1anza universitaria de Inform\u00e1tica el lenguaje se ha popularizado debido al excelente libro <a href=\"http:\/\/mitpress.mit.edu\/sicp\/\">SICP<\/a> (Structure and Interpretation of Computer Programs, MIT Press).<\/p>\n<p>Es curioso que en Espa\u00f1a apenas se haya divulgado. S\u00f3lo conozco un par de asignaturas en titulaciones universitarias que utilizan Scheme (<a href=\"http:\/\/www.cs.us.es\/cursos\/i1m\/\">Inform\u00e1tica para Matem\u00e1ticas<\/a> en la Universidad de Sevilla y nuestra <a href=\"http:\/\/www.dccia.ua.es\/dccia\/inf\/asignaturas\/LPP\">Lenguajes y Paradigmas de Programaci\u00f3n<\/a> en la Universidad de Alicante). \u00bfConoc\u00e9is alguna m\u00e1s?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dice Yukihiro Matsumoto que uno de los principios en los que se bas\u00f3 para crear el lenguaje de programaci\u00f3n Ruby era el principio de la m\u00ednima sorpresa. Un lenguaje de programaci\u00f3n debe sorprender lo m\u00ednimo posible a los programadores que &hellip; <a href=\"https:\/\/blogs.ua.es\/domingo\/2007\/06\/08\/scheme\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":43,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[374],"tags":[],"class_list":["post-5","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/posts\/5","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/users\/43"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/comments?post=5"}],"version-history":[{"count":1,"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/posts\/5\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/posts\/5\/revisions\/27"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/media?parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/categories?post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/domingo\/wp-json\/wp\/v2\/tags?post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}