Esperantilo Blogo en Esperanto pri projekto Esperantilo kaj komputila lingvistiko

4.5.2007

Programlingvo „Scheme“

Filed under: programado — artur @ 19:05

Mi ĝenerale interesiĝas 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ŭ praktike. Mi jam kelkfoje provis programi ion per Lispo, sed mi ĉiam 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ŭ komfortaj por uzantoj. Ili havas kutime uzeblecon de unuaj enigmaj programoj de 70-aj jaroj. La erarmesaĝoj estas enigmaj kaj mi ne sukcesis lerni la lingvon. La dokumentaro por Lispo preskaŭ ne ekzistas por iu konkreta medio. La plej konata estas la programo Emacs. Do oni ne povas direkte programi laŭ iu libro aŭ dokumentaro, ĉar la ekzemploj ne funkcias por tiu dialekto, kiun ni ĵus 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ĝo tre abstraktaj. Mi pensas, ke la ĉefa kaŭzo pro tio estis, ke la aŭtoroj de tiuj libroj mem konstruis la programan lingvon kaj interesiĝis nur por kelkaj aspektoj de lingvo, sed ne pri praktika apliko. Do mi neniam sukcesis konkrete solvi problemojn per tiu lingvo. Mi pensas ankaŭ, ke la precipa solvmaniero de prilaboro per rekursio estas por multaj hodiaŭaj programistoj tute ne konata (Ekzemplo de iu komputila diskutgrupo). La strikte matematika pensmaniero ne estas ankaŭ praktika por programado, ĉar la rezultaj programoj simple estas tro malrapidaj. Ekzemple mi tre miris pri la solvo de problemo, ĉu iu nombro estas para aŭ malpara. Por matematikisto estas evidente, ke

  1. 0 estas para nombro
  2. n estas para, se n-1 estas malpara
  3. n estas malpara, se n-1 estas para
(define (para? n)
   (cond
     [(= n 0) true]
     [else (malpara? (- n 1))]))
(define (malpara? n)
   (cond
      [(= n 0) false]
      [else (para? (- n 1))]))

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ŭga. Mi frue programis en Asemblo kaj C. Tial mi scias, ke la plej rapida solvo en alia lingvo estas la testado de lasta bitumo. Ĉar la nombroj jam estas en bituma reprezento, tiu operacio estas tre tre rapida. Do mi precipe konas la funkciadon de komputilo kaj ĝiajn limigojn.
boolean estasPara(int n) { return n & 1 == 1 ? false : true; }
Tamen por granda parto de problemoj Lispo oferas tre abundajn eblojn de abstraktado, kiu helpas tre elegante difini la programon. Mi legis la blogan artikolon The Perils of JavaSchools – Joel Spolsky, kaj tiu artikolo denove vekis mian intereson pro Ŝemo (angle Scheme) (programa lingvo, kiu estas modernigita Lisp). La aŭtoro de tiu artikolo tre bedaŭras, ke hodiaŭaj 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ŭ la programan medion DrScheme kaj instruan retan libron How to Design Programs An Introduction to Computing and Programming. Tiu estas vere la unua medio por Ŝemo kaj instrua libro por tiu lingvo, kiuj estis farita por normalaj mortemuloj. Finfine ekzistas bona libro, kiu klarigas la programadon per Ŝemo. 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 Ŝemo estas tre eleganta lingvo.

Mi eĉ komprenis kaj mem programis kelkajn variantojn de QuickSort. 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ŭ programita por instruaj kialoj kaj rapideco ne estis ilia plej grava trajto. Ekzistas ankaŭ alia libera eldono de Schema, kiu estas eble pli rapida kaj memorŝpara. Tiu estas programo Guile. Kvankam tiu lingvo havis tre fortan aprobon de konata programisto Richard Stallman, ĝi ne estas tre populara kompare al aliaj tn. skriptaj lingvoj.

Mi pensas, ke programado per tiu lingvo estas tiom alia kaj dokumentaro tiom malbona, ke la plejparto de programistoj tute ne havas ŝancojn lerni ĝin. Rimarkinde neniu granda firmao subtenas tiun lingvon kaj precipe funkciajn lingvojn. Nur lastatempe Microsoft en sia .NET subtenas la lingvon OCalm sub nova nomo F#, kiu havas similajn trajtojn kiel Ŝemo. Ankaŭ tiu subteno havas ĝis nun nur akademian karakteron. Do eble tiuj funkciaj lingvoj iam estos ankaŭ gravaj por profesia programado.

Ekzistas ankaŭ alia libro pri la programlingvo Ŝemo Structure and Interpretation of Computer Programs. Sed tiu libro ankaŭ apartenas al libroj, kiujn oni kiel novulo maleble povas kompreni. Mi esperas, se iam mi ankaŭ povus iam legi kaj kompreni ankaŭ tiun libron.

Fine mi sukcesis eklerni Lispon (kiel Ŝemo). Por programistoj tio estas kvazaŭ la sekva ŝtupo de informadika scipovo.

1 Kommentar »

  1. Mi antaux ne longe malkovris kaj uzis la programlingvon ‚icon‘, kiun al mi montris chemoelectric. Gxi tre belas. 🙂

    Cetere, mi konas esperantiston, kiu laboras profesie per LISP. (Spunko, el Portugalio). Sxajne guglo permesos ke vi lin trovu, se vin interesas lin kontakti.

    Kommentar by Lluís — 15.5.2007 @ 10:25

RSS feed for comments on this post. TrackBack URL

Leave a comment

Du musst angemeldet sein, um einen Kommentar abzugeben.

Powered by WordPress