{"id":76,"date":"2007-05-04T19:05:20","date_gmt":"2007-05-04T18:05:20","guid":{"rendered":"http:\/\/blog.esperantilo.org\/?p=76"},"modified":"2009-12-07T22:56:10","modified_gmt":"2009-12-07T21:56:10","slug":"programlingvo-scheme","status":"publish","type":"post","link":"http:\/\/blog.esperantilo.org\/?p=76","title":{"rendered":"Programlingvo &#8222;Scheme&#8220;"},"content":{"rendered":"<p>Mi \u011denerale interesi\u011das pri programaj lingvoj (vidu: <a href=\"http:\/\/www.scriptol.org\/encyclopedia.html\">enciklopedio de programaj lingvoj<\/a>) kaj mi lernis kaj provis multe da ili. Unu el la plej malnovaj kaj elstaraj lingvoj estas <a href=\"http:\/\/eo.wikipedia.org\/wiki\/Lispo\">Lispo<\/a>. Oni ofte mencias Lispon en diferencaj libroj, sed mi neniam vidis, ke iu uzis tiun lingvon profesie a\u016d praktike. Mi jam kelkfoje provis programi ion per Lispo, sed mi \u0109iam malsukcesis. La unua problemo estas la elekto de programa medio. Ekzistas multaj Lisp-dialektoj kaj ili ofte tre diferencas. Tiuj programaj medioj por Lispo ne estas anka\u016d komfortaj por uzantoj. Ili havas kutime uzeblecon de unuaj enigmaj programoj de 70-aj jaroj. La erarmesa\u011doj estas enigmaj kaj mi ne sukcesis lerni la lingvon. La dokumentaro por Lispo preska\u016d ne ekzistas por iu konkreta medio. La plej konata estas la programo Emacs. Do oni ne povas direkte programi la\u016d iu libro a\u016d dokumentaro, \u0109ar la ekzemploj ne funkcias por tiu dialekto, kiun ni \u0135us uzas. Tamen en literaturo ekzistas fantastaj priskriboj de eblecoj de tiu lingvo. En unuaj libroj, kiujn mi legis pri Lispo la ekzemploj estis tre matematikaj kaj ofte jam post unu pa\u011do tre abstraktaj. Mi pensas, ke la \u0109efa ka\u016dzo pro tio estis, ke la a\u016dtoroj de tiuj libroj mem konstruis la programan lingvon kaj interesi\u011dis nur por kelkaj aspektoj de lingvo, sed ne pri praktika apliko. Do mi neniam sukcesis konkrete solvi problemojn per tiu lingvo. Mi pensas anka\u016d, ke la precipa solvmaniero de prilaboro per rekursio estas por multaj hodia\u016daj programistoj tute ne konata (<a href=\"http:\/\/groups.google.de\/group\/comp.lang.tcl\/browse_frm\/thread\/ae44998f6fd07185\/05a83896c1f410e6\">Ekzemplo de iu komputila diskutgrupo<\/a>). La strikte matematika pensmaniero ne estas anka\u016d praktika por programado, \u0109ar la rezultaj programoj simple estas tro malrapidaj. Ekzemple mi tre miris pri la solvo de problemo, \u0109u iu nombro estas para a\u016d malpara. Por matematikisto estas evidente, ke<\/p>\n<ol>\n<li>0 estas para nombro<\/li>\n<li>n estas para, se n-1 estas malpara<\/li>\n<li>n estas malpara, se n-1 estas para<\/li>\n<\/ol>\n<pre>\r\n(define (para? n)\r\n   (cond\r\n     [(= n 0) true]\r\n     [else (malpara? (- n 1))]))\r\n(define (malpara? n)\r\n   (cond\r\n      [(= n 0) false]\r\n      [else (para? (- n 1))]))\r\n<\/pre>\n<p>La programo estas genia, sed se oni pensas, kion faras la komputilo sur tre baza nivelo por plenumi la kalkuladon, tiam oni rimarkas, ke tiu solvo ne estas ta\u016dga. Mi frue programis en Asemblo kaj C. Tial mi scias, ke la plej rapida solvo en alia lingvo estas la testado de lasta bitumo. \u0108ar la nombroj jam estas en bituma reprezento, tiu operacio estas tre tre rapida. Do mi precipe konas la funkciadon de komputilo kaj \u011diajn limigojn.<br \/>\n<code>boolean estasPara(int n) { return n & 1 == 1 ? false : true; }<\/code><br \/>\nTamen por granda parto de problemoj Lispo oferas tre abundajn eblojn de abstraktado, kiu helpas tre elegante difini la programon. Mi legis la blogan artikolon <a href=\"http:\/\/www.joelonsoftware.com\/articles\/ThePerilsofJavaSchools.html\"><cite>The Perils of JavaSchools &#8211; Joel Spolsky<\/cite><\/a>, kaj tiu artikolo denove vekis mian intereson pro \u015cemo (angle <cite>Scheme<\/cite>) (programa lingvo, kiu estas modernigita <cite>Lisp<\/cite>). La a\u016dtoro de tiu artikolo tre beda\u016dras, ke hodia\u016daj Java-programistoj ne komprenas tre gravajn konceptojn de informatiko kaj ne kapablas nek programi en tre baza nek en tre abstrakta nivelo. Mi trovis anka\u016d la programan medion <a href=\"http:\/\/www.plt-scheme.org\/software\/drscheme\/\">DrScheme<\/a> kaj instruan retan libron <a href=\"http:\/\/www.htdp.org\/2003-09-26\/Book\/\"><cite>How to Design Programs An Introduction to Computing and Programming<\/cite><\/a>. Tiu estas vere la unua medio por \u015cemo kaj instrua libro por tiu lingvo, kiuj estis farita por normalaj mortemuloj. Finfine ekzistas bona libro, kiu klarigas la programadon per \u015cemo. Do mi malrapide tralaboras la libron kaj povas per ekzercoj kaj la programa medio tuj apliki la novan scion. Post kelkaj ekzercoj mi vere devas konfesi, ke \u015cemo estas tre eleganta lingvo.<\/p>\n<p>\nMi e\u0109 komprenis kaj mem programis kelkajn variantojn de <a href=\"http:\/\/en.wikipedia.org\/wiki\/QuickSort\"><cite>QuickSort<\/cite><\/a>. Mi rimarkis, ke la programo bezonas multe da labora memoro (120 MB) kaj ne estas tre rapida. Tamen, kompare al Java, tio ne estas surpriza afero. DrScheme estas anka\u016d programita por instruaj kialoj kaj rapideco ne estis ilia plej grava trajto. Ekzistas anka\u016d alia libera eldono de Schema, kiu estas eble pli rapida kaj memor\u015dpara. Tiu estas programo <cite>Guile<\/cite>. Kvankam tiu lingvo havis tre fortan aprobon de konata programisto <a href=\"http:\/\/en.wikipedia.org\/wiki\/Richard_Stallman\">Richard Stallman<\/a>, \u011di ne estas tre populara kompare al aliaj tn. skriptaj lingvoj.\n<\/p>\n<p>\nMi pensas, ke programado per tiu lingvo estas tiom alia kaj dokumentaro tiom malbona, ke la plejparto de programistoj tute ne havas \u015dancojn lerni \u011din. Rimarkinde neniu granda firmao subtenas tiun lingvon kaj precipe funkciajn lingvojn. Nur lastatempe Microsoft en sia .NET subtenas la lingvon <a href=\"http:\/\/caml.inria.fr\/\">OCalm<\/a> sub nova nomo <a href=\"http:\/\/research.microsoft.com\/fsharp\/fsharp.aspx\">F#<\/a>, kiu havas similajn trajtojn kiel \u015cemo. Anka\u016d tiu subteno havas \u011dis nun nur akademian karakteron. Do eble tiuj funkciaj lingvoj iam estos anka\u016d gravaj por profesia programado.\n<\/p>\n<p>\nEkzistas anka\u016d alia libro pri la programlingvo \u015cemo <a href=\"http:\/\/mitpress.mit.edu\/sicp\/full-text\/book\/book.html\"><cite>Structure and Interpretation of Computer Programs<\/cite><\/a>. Sed tiu libro anka\u016d apartenas al libroj, kiujn oni kiel novulo maleble povas kompreni. Mi esperas, se iam mi anka\u016d povus iam legi kaj kompreni anka\u016d tiun libron.\n<\/p>\n<p>\nFine mi sukcesis eklerni Lispon (kiel \u015cemo). Por programistoj tio estas kvaza\u016d la sekva \u015dtupo de informadika scipovo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mi \u011denerale interesi\u011das pri programaj lingvoj (vidu: enciklopedio de programaj lingvoj) kaj mi lernis kaj provis multe da ili. Unu el la plej malnovaj kaj elstaraj lingvoj estas Lispo. Oni ofte mencias Lispon en diferencaj libroj, sed mi neniam vidis, ke iu uzis tiun lingvon profesie a\u016d praktike. Mi jam kelkfoje provis programi ion per [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-76","post","type-post","status-publish","format-standard","hentry","category-programado"],"_links":{"self":[{"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/posts\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=76"}],"version-history":[{"count":0,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/posts\/76\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}