Skeemikeele 2 põhitunnust: rekursioon. Skeemi programmeerimiskeel. GNU Guix on GNU meeskonna uus paketihaldur

Scheme, tuntud ka kui Lisp (mitte segi ajada Common Lisp'iga), on kaasaegne algoritmiline programmeerimiskeel, mis on kuulus selle poolest, et keskendub funktsionaalsele programmeerimise paradigmale, kuid ei piirdu sellega.

Lispi perekond on Fortrani järel teine ​​pikim keelte perekond, mille asutas kirjutusvahendina John McCarthy. tehisintellekt. Üks aktiivsetest arenduses osalejatest spetsiaalsed arvutid Lispi tõlgendajaks oli Richard Stallman, hilisem Free Software Foundationi asutaja. Selle tulemusena on üks peamisi tööriistu Scheme'is arendamiseks Emacs (+Geiser, Scheme-Complete, ettevõtte režiim). Eeldatakse, et ühel hetkel on Scheme Emacsi sisekeel, mitte Emacs Lisp. (Saate seda nüüd EdWinist vaadata.)

Skeem on Lisp, mis keskendub kaasaskantavuse lihtsusele, funktsionaalsele lähenemisele ja programmeerimiskeele teooria parimate tavade rakendamisele.

Skeem areneb kahel viisil. Üksikud laiendused koostatakse RFC-dele sarnase protsessi järgi ja neid nimetatakse SRFI-deks (Scheme Request For Implementation). Määratud aja jooksul avaldatakse "standardaruande" ühendväljaanded, milles sõnastatakse, milline on skeem "tervikuna". Viimane valminud väljaanne on Revised 7 Report on Algorithmic Language Scheme (väike keel) ja uusim eksperimentaalne väljaanne on R7RS-suur Red Edition. Eeldatakse, et enne R7RS-large'i lõpliku väljaande ilmumist tuleb seitse või kaheksa vahepealset väljaannet ja Sel hetkel Kaalumisel on väljaanne 2 (Tangerine), mille eesmärk on vormistada andmestruktuurid, kogud ja numbrid, ning väljaanne 3, mis on suunatud uutele funktsioonidele.

Huvitatud spetsialistid on oodatud arutelumaterjaliga tutvuma ja hääletama vastavalt oma nägemusele teemast, olles eelnevalt end tutvustanud. [e-postiga kaitstud]

  • Stringiteek
  • Assotsiatiivsed massiivid
  • Regulaaravaldised
  • Generaatorid/akud
  • Täisarvulised tehted
  • Bitioperatsioonid
  • Matemaatilised tehted fikspunktiga
  • Matemaatilised tehted ujukomaga
  • Bitivektorid
  • Homogeensed vektorid
  • Vormindamine
  • Suured numbrid
  • Murrud
  • Täpsed numbrid

Kolmandas väljaandes käsitletavad küsimused:

  • Juhuslikud numbrid
  • algarvud
  • Täisarvude komplektid
  • Valikuline statistika
  • Vahemikud
  • Bitivektorid
  • Baiti stringid
  • Ülekanded
  • Kombinatoorika ja permutatsioonid

Anonüümne (28.11.2018 23:36:26)

MIT/GNU skeem on keele rakendus Programmeerimisskeem, mis pakub tõlgi, kompilaatorit, lähtekoodi silurit, sisseehitatud Emacsi-laadset redaktorit ja suurt käitusaja teeki. MIT/GNU skeem on kohandatud programmeerimiseks suured rakendused kiire arengutsükliga.

Muudatused:

  • Assambleed jaoks Windows rohkem ei levitata, sest olemasolevatest 32-bitistest ehitustest on tänapäevaste süsteemide jaoks vähe kasu ning 64-bitise funktsionaalsuse saavutamine nõuab märkimisväärseid jõupingutusi, millest ükski praegustest hooldajatest pole huvitatud.
  • macOS on nüüd saadaval ainult 64-bitistes versioonides, kuna 32-bitiste järkude tugi on viimastes tööriistaväljaannetes aegunud.
  • Kaasaskantav C-versioon ei sisaldu selles versioonis, kuna seda ei saanud õigeaegselt parandada.
  • Järgmise väljalaske jaoks on kavandatud hunnik väikeseid täiustusi; Selle versiooni esimene prioriteet on innovatsioon.

Olulised uuendused:

Veel muudatusi:

  • esialgne SMP tugi;
  • prügivedaja teated;
  • niidiüritused;
  • palju muid väiksemaid uuendusi ja parandusi.

Ühildumatud muudatused:

Eksperimentaalsed uued funktsioonid:

  • URI tüübil on uus süntaks: #<...>. Selle süntaksiga töötavad nii lugejad kui ka kirjutajad.

GNU Guile 2.9.1 (beeta)

Guile on GNU Scheme programmeerimiskeele rakendus, mis toetab paljusid SRFI-sid, rakendab R5RS standardit, pakub modulaarset süsteemi, täielikku juurdepääsu süsteemikõned POSIX, võrgunduse tugi, lõimed, dünaamiline sidumine, välised funktsioonikutsed ja võimas stringitöötlus. Guile suudab koodi interaktiivselt tõlgendada ja baitkoodiks kompileerida Virtuaalne masin ja koguni olla ühendatud rakendusse sisseehitatud tõlgina raamatukoguga.

2.9.1 on haru esimene beetaversioon, mis valmistub stabiilseks versiooniks 3.0. Võrreldes praeguse stabiilse haruga (2.2.x) lisab see JIT-i koostamise, mis kiirendab kõiki Guile'i programme kuni 4 korda. Selles versioonis toetatakse JIT-d ainult x86-64; Tulevased väljaanded plaanivad toetada kõiki platvorme, mida GNU Lightning toetab.

GNU Guile-CV 0.2.0

Guile-CV on raamatukogu arvutinägemine GNU Guile'i programmeerimiskeele jaoks, mis on siduv C++ keeles kirjutatud Vigra teegiga ja töötab läbi Vigra C kihi.

Välja antud programmeerimiskeel Racket 7.0

GNU Guile-CV 0.1.9

Guile-CV on GNU Guile'i programmeerimiskeele arvutinägemise teek, mis on seotud C++ keeles kirjutatud Vigra raamatukoguga ja jookseb läbi Vigra C kihi.

Muudatused alates versioonist 0.1.8:

  • Värskendatud sõltuvused.Ühilduvus on nüüd toetatud Vigra C-ga alates commit a2ff675f4 ja uuemast versioonist selle aasta jaanuaris toimunud muudatuste tõttu: vigra_nonlocalmean_c liidese argument nimetati ümber, funktsioonile vigra_medianfilter_c lisati piirivälise strateegia argument.
  • Uued liidesed: im-mediaan-filter , im-mediaan-filter-channel , im-nl-means , im-nl-means-channel .
  • Parandused: moodulis (cv tugi lateks) kasutades latex-pdftoppm - dokumenteerimata, kuid väga kasulik protseduur teksti ettevalmistamiseks piltidele lisamiseks - valikulist argumenti märksõnaga [#:res 72] tegelikult ei kasutatud, see on nüüd parandatud.

Tuli välja uus versioon 0.2.3 GNU Artanise veebiraamistikust Scheme keeles

Raamistik on kirjutatud skeemikeele - Guile Scheme - teostuses ja on mõeldud dünaamiliste veebisaitide, veebirakenduste, veebiteenuste ja veebiressursside loomiseks.

Raamistik pakub ka tööriistu andmebaasiga töötamiseks, mallide, seansside, vahemällu salvestamiseks, URL-i ümbervastastamiseks RESTfuli jaoks jne.

Nimi Artanis ise pärineb Ruby veebiraamistiku Sinatra tagaküljest.

Artanis sarnaneb veebiraamistikega, nagu Ruby Sinatra, Python Flask ja Java Spark.

Peaarendaja nimi on Nala Ginrut, jällegi Alan Turingi pöördelt.

Guile-Ncurses 2.0

Toimus guile-ncurses 2.0 väljalaskmine - GNU Guile'i tekstikasutajaliideste loomiseks mõeldud raamatukogu, mis rakendab funktsionaalset programmeerimiskeelt Scheme. guile-ncurses on Ncursesi raamatukogu ümbris.

Välja antud GNU Guile 2.0.10

GNU Guile on projekt funktsionaalse programmeerimiskeele skeemi tasuta juurutamise väljatöötamiseks, mis toetab koodi manustamist teistes programmeerimiskeeltes olevatesse rakendustesse.

Väljaanne sisaldab 253 kohustust 11 inimeselt, mis on vastu võetud 11 kuu jooksul.

Lisaks paljudele veaparandustele sisaldab väljalase uusi funktsioone, nagu SRFI-43 vektorteegi ja SRFI-64 testimise API juurutamine, uue Scheme R7RS keelestandardi osaline tugi ja GDB laiendus Guile silumiseks.

Ilmunud tõlge raamatust “Lisp in Small Pieces”.

See on Christian Kenneki üsna tuntud raamat, mis vaatleb Lispi semantikat ja selle rakendamise põhitõdesid, kasutades näitena Scheme dialekti. Jutustamise käigus analüüsitakse paljusid keele semantika aspekte, alustades erinevatest keskkondade variantidest, läbides jätke ja erandeid, lõpetades refleksiooni, makrode olemuse, C-kompilaatori ja objektisüsteemiga.

Raamat sisaldab 11 tõlki, 2 koostajat, igas peatükis virna harjutusi, palju huvitavat materjali Lispi ajaloost ja keele kujundamisel teatud otsuste langetamise põhjustest, mitmeid vihjeid kaasaegsed keeled programmeerimine, samuti väike treiler kirjandust lisaks.

Puuduvad ilmutused, uskumatult tõhusad optimeerimised, võimsad süsteemid tüübid ja muud tänapäevase arvutiteaduse atribuudid (raamat on ju 20 aastat vana), kuid seal on suurepärane kindel sissejuhatus programmeerimiskeelte juurutamisse, mis on mõeldud algajatele huvi pakkuma, selle asja põhimõistete ja tehnikatega tutvustama, luues sellega aluse edasiseks arenguks.

Täna, 22. jaanuaril 2013 toimus uus väljalase Laialt tuntud Scheme programmeerimiskeele tõlgendaja kitsastes ringkondades on Scheme48, mille arendajaks on Scheme Steering Committee üks peamisi liikmeid Jonathan Reese. Väljalase on number 1.9 ja seda on üsna kaua oodatud, kuna interpretaatorit pole suhteliselt pikka aega värskendatud.

Peamised täiendused on järgmised:

  • on lisatud uus FFI mehhanism (vana on endiselt saadaval, kuid see eemaldatakse peagi);
  • lisatud võrgutoe funktsioonide komplekt (täielik IPv6 ja UDP tugi, pole veel dokumenteeritud);
  • kirjed toetavad nüüd pärimist (saadaval r6rs-records paketi kaudu);
  • lisatud letrec*;
  • tõlk hoiatab nüüd moodulites tsükliliste sõltuvuste ja alistamiste eest;
  • lisatud statistiline profileerija;
  • kui interpreteeriv VM on kompileeritud GNU C-d toetava kompilaatoriga, siis kasutatakse otse keermestatud koodi, mis kiirendab täitmist;
  • muud täiendused, mis puudutavad R6RS-i võimaluste, ehitussüsteemi ja litsentsimist (vt linki „Üksikasjad”).

Kõige olulisemate muudatuste loend:

  • BIBOP GC enda prügikoguja on ümber kujundatud ja on nüüd vaikimisi kasutusel;
  • süntaksireeglite rakendamine on ümber kirjutatud;
  • muud ehitussüsteemi, litsentsimise ja POSIX-i toe muudatused (vt linki "Üksikasjad").

Skeemikeele juurutamise uus versioon on välja antud - GNU Guile 2.0.7. Vaatamata versiooninumbri väikesele muutusele on ilmunud mitmeid huvitavaid uuendusi, nimelt:

  • Infix-avaldiste täielik tugi (curly-infix-avaldised). Nüüd saate (* a (+ b c)) asemel kirjutada (a * (b + c)).
  • Toetab erinevaid lugemisvõimalusi erinevate portide jaoks.
  • Pesastatud tulevaste direktiivide tugi.
  • Spetsiaalne süntaks keskkonnamuutujatele GUILE_LOAD_PATH ja GUILE_LOAD_COMPILED_PATH teede lisamiseks teede loendi lõpus, mitte alguses.
  • Parandatud viga funktsioonis load-in-vicinity, mis ei kontrollinud muutujas %load-compiled-path määratud katalooge.
  • Fikseeritud laienduse otsingujärjekord. Guile ei muuda nüüd selle keskkonnamuutujat LD_LIBRARY_PATH.
  • Funktsioon make-vtable-vtable on aegunud, soovitatav on kasutada make-vtable ja .
  • Kas võrdsed kõned on optimeeritud? ja ekv? juhtudel, kui üks argumentidest on konstant.
  • Uued kompilaatori hoiatused -Wduplicate-case-datum ja -Wbad-case-datum.
  • Arvukalt väiksemaid täiustusi ja veaparandusi.

GNU Guix - uus juht paketid GNU meeskonnalt

Ludovic Courtès, üks GNU projekti kaasautoritest, teatas kõigi GNU/Linuxi distributsioonide jaoks mõeldud uue paketihalduri esimese alfaversiooni – GNU Guix – väljalaskmisest, mis põhineb Nixi paketihalduril.

Välja arvatud standardfunktsioonid tarkvara installimine, desinstallimine ja värskendamine GNU Guix toetab tehingute versiooniuuendusi koos võimalusega naasta eelmisele versioonile, töötab ilma administraatoriõigusteta, sisaldab iga kasutaja jaoks eraldi konfiguratsiooniprofiile ja sisaldab prügikogujat (aegunud pakettide jälgimiseks ja ignoreerimiseks). Kuid GNU Guixi kõige olulisem omadus on see, et see on välja töötatud funktsionaalses keeleskeemis.

Lähtekoodi saate hankida Giti hoidla kaudu.

Kasutusele võeti programmeerimiskeele Racket (endine PLT Scheme) versioon 5.2.

Uus selles versioonis:

  • Uus `db' teek pakub kõrgetasemelist liidest populaarsetele RDBMS-idele: MySQL, SQLite, PostgreSQL ja ka teistele ODBC kaudu.
  • Uus XREPL-i kollektsioon, mis pakub tugikäsklusi Racketi lugemis-käivita-printimise silmuse (REPL) jaoks. See on kasulik inimestele, kes kasutavad Racketi konsooliversiooni ja alternatiivseid toimetajaid.
  • Kogum "Prat" on Racketis ümber kirjutatud, et toetada PDF-väljundit, logaritmilisi telgesid, histogramme ja palju muud.
  • DrRacket kasutab traditsioonilisi kiirklahve: C-t loob uuel kaardil, C-w sulgeb vahekaardi, C-r täidab definitsioonid.
  • Trükitud reket:
    • Typed Racket pakub tööriistu staatilise jõudluse silumiseks: see näitab, millist koodi optimeeritakse ja millist mitte.
    • Rohkem intuitiivseid tüüpe REPL-väljundis ja veateadetes.
    • Toetab funktsioonide määratlemist valikuliste argumentidega, kasutades sama süntaksit nagu Racket.
  • Parandatud mitu probleemi graafiline liides, sealhulgas Ubuntu 11.10 (GTK+3) ja 64-bitine Mac OS X.
  • Sisemistel definitsioonidel on nüüd `las*' semantika, kui need ei sisalda tagasilingid, see välistab sisemiste definitsioonide kasutamise 'let' asemel ja muudab sisemiste definitsioonide jätke hõivavate programmide tähendust.

See standard on R5RS-standardi suhteliselt väike redaktsioon, mis lisab keele kõige populaarsemad funktsioonid, kuid püüab hoida üldist struktuuri muutumatuna. Varasemate standardite vaimus on paljud olukorrad jäetud Scheme keele rakenduste autoritele, jättes ruumi oma laiendustega katsetamiseks.

Skeemikeel on traditsiooniliselt Emacsi jaoks üsna hästi toetanud. Seda tuge pakub pakettide komplekt, mis võib töötada selle keele mõlema suvalise juurutusega ( skeem-režiim, cmuskeemi, vutima) ja toetavad ainult konkreetseid rakendusi ( xscheme, gds, mesilase režiim, gambiit). Tavaliselt on juurutusspetsiifiline tugi mõnevõrra põhjalikum kui kõiki rakendusi toetavad paketid.

See artikkel püüab käsitleda kõiki Scheme'i programmeerimise toetamise küsimusi ja räägib kõigepealt kõigi rakenduste jaoks ühistest asjadest ning alles seejärel käsitleb pakette, mis rakendavad teatud keeleversioonide tuge.

Skeem-režiim

Skeem-režiim Emacsi distributsioonidega kaasas on modifikatsioon lisp-režiim Skeemikeeles lähtekoodiga töötamiseks. See pakett rakendab järgmisi funktsioone:

  • süntaksi esiletõstmine
  • taane
  • paarissulgude esiletõstmine

Alusel skeem-režiim Loodud on mitmeid teisi pakette - ja teisi, mis laiendavad selle funktsionaalsust, lisades funktsioone koodi käivitamiseks otse Emacsi puhvrist jne. asjadest.

See režiim on kasutatavate failide jaoks automaatselt lubatud standardsed laiendused failide jaoks koos lähtetekstid skeemil - .scm, .ss jne. Sisselülitamiseks see režiim muude failide puhul lisage oma lähtestamisfailile järgmine kood (asendades .scm soovitud laiendiga):

(lisa loendisse "auto-mode-alist"("\\.scm$" .scheme-mode))

Kui soovite paketi käitumist muuta, saate määrata parameetrid funktsioonis, mis skeem-mode-hook muutujale lisamisel kutsutakse välja, kui režiim on konkreetses puhvris lubatud. Lisaks saab mõningaid parameetreid määrata standardsete konfiguratsioonitööriistade abil. Vastavat seadistusrühma nimetatakse skeemiks.

Cmuscheme

Kilekott cmuskeemi kirjutas Olin Shivers aastaid tagasi, kuid see on endiselt üks peamisi skeemipakette. See pakett rakendab interaktiivset tööd Scheme keele tõlkidega. Suhtlemine tõlgiga toimub paketi võimalusi kasutades tulemas, kaasas Emacsiga.

Paketi seadistamine

Paketi seadistamine on üsna lihtne – sisestage oma lähtestamisfaili järgmine kood

(automaatne laadimine "run-scheme "cmuscheme" "Käivita halvem skeem" t) (setq skeemi-programmi nimi "mzscheme" )

ja pakett laaditakse automaatselt, kui käivitate funktsiooni Run-scheme esimest korda. Selle näite teist rida kasutatakse skeemitõlgi nime määramiseks, mille saate asendada oma lemmikmurdega. Kõik selle paketi sätted on saadaval ka interaktiivseks konfigureerimiseks cmuscheme konfiguratsioonirühma kaudu.

Paketi loodud interpretaatori puhver kasutab spetsiaalset režiimi - inferior-scheme-mode, mida saab seadistada inferior-scheme-mode-hook abil. Lisaks, kui fail ~/.emacs_SCHEMENAME või ~/.emacs.d/init_SCHEMENAME.scm on olemas (kus SKEEM on tõlgi nimi), käivitatakse need kohe pärast tõlgi laadimist.

Töö paketiga

Paketi põhifunktsiooniks on run-scheme funktsioon, mis käivitab valitud Scheme keele tõlgi ja võimaldab interaktiivset koodi käivitamist Emacsist lahkumata.

Selle abil saate juhtida, milline koodiosa (spetsiaalne plokk, funktsiooni definitsioon või üksik avaldis) käivitatakse, kasutades erinevaid funktsioone, paketi poolt määratletud - funktsioon skeem-saada-definitsioon (kombinatsioonid klahvid C-c C-e või C-M-x) edastab praeguse definitsiooni tõlgile täitmiseks; funktsioon schema-send-region (C-c C-r) võimaldab käivitada valitud lähtekoodijupi; funktsiooniskeem-send-last-sexp (C-x C-e) kasutatakse kursori ees oleva avaldise hindamiseks; ja skeem-load-file (C-c C-l) funktsioon võimaldab laadida interpretaatorisse terve faili (see võimaldab käivitada koodi mis tahes kasutaja määratud failist, mitte ainult praegusest puhvrist).

Skeemi interpretaator töötab eraldi puhvris nimega *scheme* , kuhu väljastatakse ka avaldiste ja funktsioonide hindamise tulemused. Sellele puhvrile lähteteksti puhvrist kiireks lülitumiseks on eraldi funktsioon lülitusskeemile (C-c C-z). Lisaks, kuna sageli on vaja koodi käivitada ja tulemusi vaadata, defineerib pakett ka kaks funktsiooni, mis saadavad koodi tõlgile täitmiseks ja lülituvad *skeemi* puhvrisse - schema-send-definition-and-go ( C-c M-e) praeguse määratluse arvutamiseks ja eraldatud lähtekoodi hindamiseks skeem-saada-piirkond-ja-mine (C-c M-r).

Makrodega töötamiseks pakub pakett funktsiooni skeem-laienda-voolu-vorm (C-c C-x), mis võimaldab laiendada praeguse makro definitsiooni vastavaks skeemikoodiks. Koodi laiendamise teostab interpretaator ja väljastab selle *skeemi* puhvrisse. Ja kui töötate lähtekoodi kompileerimist toetavate skeemi rakendustega, saab kasutaja ära kasutada funktsioone skeem-kompileeri-fail (C-c C-k) ja skeem-kompileeri-definitsioon (C-c M-c), mis kompileerivad vastavalt faili või kehtiva definitsiooni. .

Nagu ülalpool märgitud, on interpretaatori puhvris spetsiaalne režiim - inferior-scheme-režiim, milles töötavad kõik komint-režiimi käsud, samuti järgmised käsud cmuskeemi- skeem-koosta-fail (C-c C-k), skeem-laadimine-fail (C-c C-l), skeem-saada-viimane-sexp (C-x C-e) ja skeem-saada-definitsioon (C-M-x).

Vutik

Quacki pakett on paketi laiendus cmuskeemi ja rakendab järgmisi lisafunktsioone (paljud neist on peamiselt seotud PLT-skeemiga töötamisega):

  • menüüd, mis võimaldavad juurdepääsu keele-, tõlgi- ja SRFI-dokumentatsioonile, samuti võimaluse otsida kursori praeguses asukohas asuva funktsiooni nime kirjeldust;
  • jaoks uued taustvalgustuse komplektid font-lukk- PLT-skeemi ja laiendatud, muude rakenduste jaoks;
  • Kreeka sümboli kasutamise võimalus lambda lambda avaldiste tähistamiseks (näited on toodud allpool);
  • lisavalikud ja -käsud õigete ava- ja sulgesulgude sisestamiseks;
  • taandereeglite laiendused koos võimalusega konfigureerida erinevate skeemi tõlgendajate jaoks;
  • käsu run-scheme laiendatud versioon, mis teab populaarsete skeemide tõlgendajate käsunimesid ja jätab meelde ka tõlgi viimati käivitatud versiooni;
  • skeemile lülitumise käsu laiendatud versioon;
  • võimalus vaadata .plt kogude sisu ja käske puhvri avamiseks Dired soovitud kollektsiooni jaoks.

Paigaldamine ja seadistamine

Paketi kirjutas Neil Van Dyke ja see on allalaadimiseks saadaval autori veebisaidilt. Pakett installitakse, kopeerides selle kataloogi, kust Emacs selle leiab, ja laaditakse käsuga:

(nõua "vutti")

Kõiki paketi sätteid saab konfigureerida vutiseadete rühma või vutimenüü abil. Need sätted hõlmavad juhendite ja SRFI-de aadresse, paketi poolt kasutatava prefiksi kiirklahvi määramist jne.

PLT-skeemi kasutajatel soovitatakse selle tõlgi juhendid projekti veebisaidilt alla laadida ja kogusse installida dok. PLT Scheme kogude asukoha määrab kas muutuja quack-pltcollect-dirs, mis võib loetleda kõik töötavate kogudega kataloogid või keskkonnamuutujad PLTHOME ja/või PLTCOLLECTS .

Pakett nõuab ka programmi wget olemasolu, mida kasutatakse SRFI-le juurdepääsuks.

Töö paketiga

Peale paketi allalaadimist lisaks funktsioonidele cmuskeemi Ja skeem-režiim Paketis määratletud funktsioonid muutuvad kättesaadavaks. Kasutaja saab neid funktsioone täita kas standardsete mehhanismide (klaviatuuri otseteed ja/või funktsiooni nime järgi käivitamine) või Quack menüü abil.

Dokumentatsiooni saate vaadata mitme funktsiooni abil. Funktsiooni quack-view-manual (C-c C-q m) kasutatakse dokumentatsiooni vaatamiseks veebibrauseris. See käsk võimaldab teil vaadata nii skeemi keele põhidokumentatsiooni kui ka konkreetsete rakenduste dokumentatsiooni. SRFI vaatamiseks on defineeritud eraldi käsk - quack-view-srfi (C-c C-q s), mis küsib numbrit nõutav dokument ja avab selle brauseris. Ja PLT-skeemi kasutajatele on saadaval ka käsk quack-view-keyword-docs (C-c C-q k), mis kuvab antud märksõna dokumentatsiooni ( selle meeskonna töö sõltub õige paigaldus PLT skeemi dokumentatsioon).

Nagu eespool märgitud, rakendab pakett funktsiooni Run-scheme (C-c C-q r), mis võimaldab käivitada skeemi keele tõlgid, valides need teadaolevate loendist (sh käivitades vajalike suvanditega) ja jätab ka meelde. viimane valik kasutaja.

Mugavad funktsioonid kogudega töötamiseks on määratletud ka PLT-skeemi kasutajatele. Funktsioon quack-find-file (C-c C-q f) avab faili, kasutades failinime saamiseks praeguse konteksti andmeid. Näiteks kui kasutate seda funktsiooni, kui kursor on koodil (require (lib "list.ss")), palutakse teil avada kogust fail list.ss mzlib. Lisaks on määratletud funktsioon quack-dired-pltcollect, mis võimaldab avada puhvri Dired soovitud PLT-skeemi kogu jaoks (nime määramisel saab kasutaja kasutada kogu nime automaatset lõpetamist).

See pakett rakendab ka mitmeid funktsioone, mis muudavad koodi vormingut, muutes selle kasutamise mugavamaks. Funktsioon quack-tidy-buffer (C-c C-q t) taandab koodi uuesti, asendab tabeldusmärgid tühikutega, eemaldab liigsed tühjad read, eemaldab lõpuread tühikud ridades ja lisab faili lõppu ka reavahetuse, kui seda pole. Funktsioon quack-toggle-lambda (C-c C-q l) muudab praeguse funktsiooni deklaratsiooni (define (func args) ...) väärtuseks (define func (lambda (args) ..)), mis võimaldab lambda märgil kuvatakse koodis (kui see on lubatud selle sümboli kuvamise valikud). Näiteks nii:

GCA pakett

G.C.A.— pakett, mis on loodud tõhusaks tööks Scheme lähtekoodiga. See loodi Gauche'i skeemi toetamiseks, kuid seda saab kasutada ka teiste murretega. meeldib vutima, see laiendab paketi funktsionaalsust cmuskeemi.

Sellel paketil on järgmised funktsioonid:

  • kooditükkide sisestamine mallimehhanismi abil
  • kuvada funktsioonide kirjeldused
  • nime lisamine

Sellel paketil on mõningaid arhitektuurilisi erinevusi teistest pakettidest – standardset sisendit ja väljundit kasutavate interpretaatoritega suhtlemise asemel kasutab see pakett andmete edastamiseks lihtsat võrguprotokolli. See lähenemine võimaldab esineda suur kogusülesandeid, kuid sõltub suuresti tõlgi rakendamisest ja nõuab eraldi protsess Skeem (server gds), mida kasutatakse teiste protsessidega suhtlemiseks.

Paigaldamine ja seadistamine

Kilekott gds tuleb koos uusimad versioonid Guile, nii et kõik, mida pead tegema, on lisada Emacsi Lispi lähtefailid Emacsi otsinguteele ja panna need lähtestamisfaili järgmine rida:

(nõua "gds")

See käsk laadib paketi alla ja käivitab eraldi protsessi, mis vastutab skeemide tõlgendajatega suhtlemise eest. Väärib märkimist, et paketi toimimiseks peab Guile'i otsinguteedel olema eraldi pakett Scheme jaoks. Kui pakett on ebastandardses asukohas, saate selle asukoha määrata muutuja gds-scheme-directory abil, vastasel juhul, kui seda paketti pole, ei laadita paketti täielikult.

Muid sätteid saab määrata gds-i seadete rühma abil.

Lähtekoodiga töötamine

Kilekott gds kasutab koodi arvutamiseks samu kiirklahve nagu cmuskeemi. Erandiks on funktsioon gds-eval-expression (C-c C-e), mis hindab minipuhvri sisestatud avaldist.

Üks toredaid täiendusi rakendatud gds on funktsioonide ja muutujate nimede lõpuleviimine, samuti konkreetsete sümbolite kohta abi hankimine ja/või sümboli nime järgi otsimine.

Nime lõpetab funktsioon gds-complete-symbol (M-TAB otsetee), mis püüab leida kõiki teadaolevaid sümboleid, mille nimed vastavad kursori ees olevatele tähtedele. Kui leitakse üks nimi, sisestatakse see kohe, mitme valiku korral aga kuvatakse uus aken, kus kasutaja saab valida soovitud nime.

Konkreetse sümboli jaoks abi hankimine toimub funktsiooni gds-help-symbol (C-h g) abil, mis annab sama tulemuse kui käsu (help SYMBOL) käivitamine Guile interaktiivses keskkonnas. Sümboli nime küsib kasutaja minipuhvri kaudu, kuid vaikeväärtus on nimi, millel kursor asub. Kui te ei mäleta sümboli täpset nime, võite kasutada funktsiooni gds-apropos (C-h G), mis sarnaneb Guile'i käivitamisega (apropos REGEXP) ja mis prindib loendi sümbolitest, mille nimed vastavad sisestatud regulaaravaldis.

Silumine

Võimalusi ära kasutada gds interaktiivse töö ajal peab kasutaja siiski selgelt määrama moodulid, millega tööd pakkuda gds. Näiteks järgmise koodi kasutamine laadib kõik tööks vajalikud moodulid:

(use-modules (ice-9 gds-client silumislõksud)) (named-module-use! "(guile-user) "(ice-9 session)) (gds-accept-input #f)

Pärast seda saate töötada gds. Katkestuspunkti määramiseks protseduuris proc_name kasutatakse lähtekoodipuhvris arvutatud järgmist:

(install-trap (make #:behaviour gds-debug-trap #:procedure proc_name))

ja pärast määratud protseduuri kutsumist saate puhvris gds midagi sellist:

Helistamise protseduur: => s s --:** PID XXXXX (Guile-Debug)--Kõik--------

selles puhvris saate pinus liikuda, selle olekut vaadata, programmi täitmist jätkata ja/või sellest läbi astuda. Töö pinupuhvris on tagatud mitmete üksikute klahvidega seotud käskude kasutamisega.

Funktsioonikutsete pinus saab liikuda järgmiste klahvidega: u , C-p ja ülesnoolt kasutatakse kõnevirnas ülespoole liikumiseks ja selle kaadri valimiseks (funktsioon gds-up), alla liikumiseks d , C-n ja allanoolt. (gds-down) ja klahvi RET kasutatakse raami, millel kursor asub, valimiseks.

Virnaraami valimisel kuvatakse vastav osa lähtekoodist. Lisaks kasutavad mõned funktsioonid täitmisel ka valitud kaadriga seotud keskkonda.

Viru puhvris töötavad lisafunktsioonid hõlmavad järgmist.

gds-evaluate (e-võti) võimaldab hinnata avaldist valitud kaadrile vastava keskkonna abil, mille tulemus kuvatakse kajaalas; gds-frame-info(i) näitab teavet valitud kaadri kohta - rida lähtefailis, vastav avaldis, kaadri tüüp jne; gds-frame-args(A) näitab rakenduse raami argumente; gds-proc-source(S) näitab väljakutsutava protseduuri lähtekoodi. See funktsioon on väga kasulik juhtudel, kui protseduur on loodud anonüümse lambda avaldise abil, kuna selliseid protseduure näidatakse funktsiooni kutse pinus kui Mis ei anna selgeks, mida järgmiseks tehakse.

Katkestatud programmi täitmise jätkamiseks gds rakendab järgmisi funktsioone:

gds-go (g , c või q) jätkab programmi täitmist; gds-step-fail (SPC) käivitab ühe sammu funktsioonidest, mis kuuluvad valitud virnaadriga samasse lähtefaili. Funktsioonid muudest failidest täidetakse, kuid ilma nendesse sisenemata; gds-step-into (i) sooritab järgmise sammu. See on programmi täitmise kõige üksikasjalikum tase; gds-step-over (o) käivitab programmi seni, kuni valitud pinu kaader on täitmise lõpetanud.

Kõiki neid funktsioone kasutades saab arendaja üksikasjalikku teavet programmi oleku kohta ning tal on võimalus vigu leida ja parandada.

Skeem48

skeem48- teine ​​pakett, mis põhineb cmuskeemi, kuid pakub Scheme48 rakendamisele laiendatud tuge. See pakett lisab tuge font-lukk Scheme48-spetsiifiliste märksõnade ja operaatorite jaoks ning täiendavad sidemed väljendite hindamise käskude võtmed.

Selle paketi installimise protseduur on standardne – asetage gambit.el kohta, kust Emacs selle leiab, ja lisage initsialiseerimisfaili järgmised read:

(automaatne laadimine "gambit-halvem-režiim "gambit" "Hook Gambit mode into cmuscheme.") (automaatne laadimine "gambit-mode "gambit" "Hakk Gambit mode skeemi.") (add-hook "alam-skeem-mode-hook (funktsioon gambit-inferior-mode)) (add-hook "skeem-režiim-konks (funktsioon gambit-režiim)) (setq skeemi-programmi nimi "gsi -: d-")

Gambit-tõlk käivitatakse rakenduses realiseeritud funktsiooni Run-scheme abil cmuskeemi, Aga gambiit lisab sellele väljundi filtreerimise rutiinid, mis võimaldab paketil hankida asukohateavet lähtefail. Pärast tõlgi käivitamist on kasutajal võimalik koodi käivitamiseks ja kompileerimiseks kasutada standardseid kiirklahve - C-x C-e, C-c C-l, C-c C-k jne.

Lisaks funktsioonidele cmuskeemi, kilekott gambiit pakub mitmeid lähtekoodi silumiseks mõeldud funktsioone:

gambiit-jätka (F8 või C-c c) jätkake koodi täitmist. Sarnaselt tõlgi käsuga,c; gambit-crawl-backtrace-uuem (F9 või C-c ]) minge ahela eelmisele kaadrile. Sarnaselt käsule - interpreter; gambit-crawl-backtrace-older (F10 või C-c [) liikuda ahela järgmise kaadri juurde. Sarnaselt + interpreter käsuga; gambit-step-continuation (F11 või C-c s) sooritage üks arvutussamm, sealhulgas sisestage kutsutud funktsioon. Samamoodi tõlgi käsk; gambiithüpe-jätk (F12 või C-c l) sooritada üks arvutussamm kutsutud funktsiooni sisestamata. Sarnaselt interpretaatori käsuga,l; gambit-kill-last-popup (C-c_) kustutage avaldise kuvamiseks loodud aken.

Nende käskude jaoks on olemas ka lühemad kiirklahvid: M-c , M-[ , M-] , M-s , M-l ja M-_ , kuid need pole vaikimisi lubatud, kuna need ei järgi päris Emacsi kiirklahvide tavasid. Nende kasutamise lubamiseks peate käivitama järgmise käsu (või panema selle lähtestamisfaili):

(setq gambit-repl-command-prefix "\e")

Bee-režiim (bmacs)

bmacs on integreeritud tarkvarakeskkonna rakendamine Bigloo skeemiga töötamiseks. See pakett rakendab järgmisi funktsioone:

  • koodi silumine;
  • profileerimine;
  • Makefile'ide automaatne loomine ja värskendamine;
  • koodinavigeerimine;
  • integreerimine versioonikontrollisüsteemidega;
  • dokumentatsiooni vaatamine;
  • interaktiivne koodi täitmine;
  • makro laiendamine;
  • teatav tugi kirjaoskajale programmeerimisstiilile.

Selle paketi tööks on vaja mitmeid täiendavaid utiliite, millest enamik on Biglooga kaasas. Dokumentatsiooni leiate projekti veebisaidilt või levitamise osana.

Paigaldamine ja seadistamine

See pakett on saadaval Bigloo skeemi osana ja asub distributsiooni bmacsi alamkataloogis. Paketi installimiseks minge sellesse kataloogi ja käivitage seal käsk:

Tee install EMACSDIR =

mis kehtestab vajalikud failid teie märgitud asukohta. Pärast seda saate lähtefailide avamisel paketi automaatseks laadimiseks oma lähtestamisfailile lisada järgmised read:

(autoload "bdb "bdb" "bdb mode" t) (autoload "bee-mode "bee-mode" "bee mode" t) (setq auto-mode-alist (lisada "(("\\.scm$" . bee-mode) ("\\.sch$" . bee-mode) ("\\.scme$" . bee-mode) ("\\.bgl$" . bee-mode) ("\\.bee$ " . bee-mode)) auto-mode-alist))

Paketi sätteid saab määrata mesilaste seadete rühma abil, mis pakub seadeid mesilase režiim ja rühmad dbg & viga, mida kasutatakse siluri seadete määramiseks.

Lähtekoodiga töötamine

Pärast allalaadimist mesilase režiim kasutaja saab põhikäske täita vastavate tööriistariba ikoonide abil või valides vajalikud punktid menüüst Bee, mis ilmub režiimi käivitumisel.

Et taane vastavalt Bigloo tavadele, pakend mesilase režiim defineerib mitu funktsiooni: bee-indent-sexp (C-M-q) taandab aktiivse avaldise, bee-indent-define ( C-c TAB C-d) teeb seda praeguse funktsiooni definitsiooni jaoks, bee-indent-last-sexp (C-c TAB C-l) taandab avaldise kursori ette jne.

Väga oluline funktsioonide kogum, mida lähtekoodiga töötamisel kasutatakse, on funktsioonid funktsioonide ja muutujate definitsioonide otsimiseks. Muutuja definitsiooni leidmiseks võib kasutada bee-tags-find (C-x 5 .) või bee-tags-find-muutuvit (C-c C-d f). Ja mooduli definitsiooni otsimiseks on funktsioon bee-find-module (C-c C-d m). Pealegi, mesilase režiim defineerib ümber kaks kiirklahvi – M-. & M-, mis seostuvad funktsioonidega bee-tag-find ja bee-tags-find-next, võimaldades leida funktsioonide ja klasside määratlusi.

Moodulitega töötamise lihtsustamiseks mesilase režiim määratleb funktsioonide komplekti, mis haldab praeguse lähtekoodiga imporditud moodulite loendit - bee-import-binding funktsioon (C-c RET i), samuti aktiivsest moodulist eksporditud funktsioonide ja muutujate loendit - bee-export- funktsioon (C-c RET f) ja mesilane- eksport-muutuja (C-c RET v). Lisaks on olemas eraldi funktsioon, mis võimaldab importida sümboleid C-failidest - bee-import-c-file (C-c RET c), samuti värskendab see Makefile'i, et lisada sõltuvus vastava koodi koostamiseks.

Pakett pakub ka mõningast tuge nn kirjaoskajale programmeerimisele. Pakutav tugi ei ole täielik, kuid võimaldab vähemalt koodi sisestada linke moodulite ja funktsioonide kirjeldustele. See saavutatakse märksõnade @path , @node & @deffn abil mooduli kommentaarides ja funktsioonide kirjeldustes. Märksõnad @path & @node määravad faili ja dokumentatsiooni jaotise, mis kirjeldab antud moodulit ja on määratud mooduli deklaratsiooni kommentaaris. Ja funktsiooni kommentaaris on märgitud märksõna @deffn. Kasutades neid märksõnad, saab arendaja kiiresti navigeerida asjakohaste jaotiste ja funktsioonide kirjeldusteni, mis võimaldab täiustada koodi dokumentatsiooni.

Koodi täitmine ja koostamine

Nii nagu teisedki paketid, mesilase režiim võimaldab käivitada skeemi koodi otse Emacsi puhvrist. Tõlgi käivitamiseks peate käivitama funktsiooni ude-repl-other-frame (C-c C-r C-r), valige sobiv tööriistariba ikoon ( Repl) või vastavat menüükäsku.

Ja pärast tõlgi laadimist saab kasutaja koodi käivitada järgmiste funktsioonide abil:

  • ude-repl-send-buffer (C-c C-r b) saadab kogu puhvri arvutamiseks;
  • ude-repl-send-region (C-c C-r r), saadab valitud koodiploki tõlgendajale;
  • bee-repl-send-define (C-c C-r d) kasutatakse praeguse definitsiooni täitmiseks;
  • bee-repl-send-last-sexp (C-c C-r l) hindab avaldise väärtust enne kursorit;
  • bee-repl-send-toplevel-sexp (C-c C-r t) kasutatakse kogu praeguse avaldise hindamiseks.

Väga sageli peate makrode kasutamisel saama neid laiendada. Nii nagu tavalise koodiga töötamiseks, mesilase režiim rakendab teie koodis makrode laiendamiseks funktsioonide komplekti (sel juhul kontrollitakse kogu puhvrit makrode määratluste olemasolu suhtes):

  • bee-expand-buffer (C-c C-e C-e) põhjustab praeguses puhvris olevate makrode laiendamise;
  • bee-expand-region (C-c C-e C-r) laiendab makrosid koodi taga;
  • bee-expand-define (C-c C-e C-d) laiendab praeguses definitsioonis makrosid
  • bee-expand-last-sexp (C-c C-e C-l) laiendab makrosid avaldises enne kursorit;
  • bee-expand-toplevel-sexp (C-c C-e C-t) laiendab praeguses avaldises olevaid makrosid.

Programmide kompileerimiseks peab sul olema Makefile, mis kirjeldab moodulite vahelisi sõltuvusi ja määrab kompileerimislipud. Projekt nõuab nn juurkataloogi - mesilase režiim püüab määrata projekti juurkataloogi, otsides ühte Makefile , .afile või .etags failidest, või juurkataloogi saab määrata funktsiooni ude-user-set-root-directory (C-c C-p C-r) või vastava funktsiooni abil. tööriistariba nupp.

Kui juurkataloog on määratud, saab Makefile'i genereerida, kasutades funktsiooni ude-generate-makefile (C-c C-c a või C-c C-c C-l), mis küsib kasutajalt käivitatava faili nime, millesse antud lähtekood sisestatakse. koostatud. Kui Makefile on juba olemas, värskendavad samad kiirklahvid seda ja taastavad ka failid .afile ja .etag. Lisaks on olemas hulk funktsioone Makefile'i redigeerimiseks - ude-redigeeri-makefile (C-c C-c e), Makefile'i värskendamiseks - ude-update-makefile (C-c C-c u), programmi silumis- ja väljalaskeversioonide vahetamiseks - ude- makefile-debug-mode (C-c C-c C-d) & ude-makefile-final-mode (C-c C-c C-f) ja teised.

Kui Makefile on olemas, on võimalik koodi kompileerida kasutades funktsiooni ude-mode-compile-from-menu (C-c C-c C-c). Kompileerimise saab katkestada kasutades kill-kompileerimise funktsiooni (C-c C-c k).

Ja pärast kompileerimise lõpetamist saate käivitada käivitatava faili ude-execute funktsiooni (C-c C-c C-r) abil.

Silumine ja profileerimine

Bigloo paketiga on kaasas ka silur, mis võimaldab siluda lähtekoodi tasemel. mesilase režiim toetab suhtlemist selle Emacsi siluriga. Siluri käivitamiseks peate käivitama bee-debug funktsiooni (C-c C-b C-b) või valima sobiva tööriistariba ikooni või menüüelemendi. Kuid siluri käivitamine ei loo sellega automaatselt ühendust, seega peate konkreetselt käivitama funktsiooni bee-toggle-connect-buffer (C-c C-b c), et siduda praegune puhver siluriga, mis võimaldab teil määrata katkestuspunkte ja teha muid toiminguid. ülesanded lähteteksti puhvris olles.

Kui kasutate Makefile'i genereerimist, toetatakse programmide profileerimist automaatselt. Profiilikoodiks tuleb see esmalt kompileerida profileerimise toega, mida tehakse bee-profiler-start funktsiooniga (C-c C-p c). Ja pärast kompileerimist saate käivitada bee-profiler-inspect (C-c C-p i), mis käivitab programmi, ja seejärel käivitada utiliidi bglprof, mis kogub teie analüüsimiseks täitmisandmeid.

Muud funktsioonid

Pakett annab kättesaamise võimalused viiteteave. Seda saab teha, käivitades funktsiooni bee-doc-visit (C-c C-d i) või klõpsates tööriistaribal ikooni Info. See funktsioon käitub sõltuvalt sellest erinevalt Praegune olukord kursor - kui kursor on identifikaatoril, väljastatakse selle identifikaatori dokumentatsioon, kui on valitud koodipiirkond, siis väljastatakse selle piirkonna dokumentatsioon. Vastasel juhul küsitakse kasutajalt huvipakkuva dokumentatsiooniosa nime ja kuvatakse valitud jaotis.

Kasutajale kuvatav teave on võetud Biglooga kaasas olevatest teabefailidest. Lisaks otsitakse dokumentatsiooni praeguse projekti kataloogidest ja need lisatakse automaatselt. Lisaks saab kasutaja määrata täiendavaid dokumentatsioonifaile, mida otsida.

Kilekott bmacs pakub ka mitmeid funktsioone versioonihaldussüsteemidega töötamiseks, mis võimaldavad andmetega töötada projekti tasemel. Kuid uute versioonikontrollisüsteemide ja neile vastavate liideste ilmnemise tõttu pole need funktsioonid eriti nõutud.

Lisaks on palju lisafunktsioone selle paketi poolt rakendatud, näiteks C-keeles kirjutatud koodiga töötamise tugi jne, kuid nende võimaluste kirjeldus ei kuulu selle artikli ulatusse.

Skeemi tugi SLIME'is

Kasutamiseks LIMA Skeemi abil peate seda tegema põhiseade pakett, nagu on kirjeldatud paketi jaotises, ja seejärel laadige alla vajalikud komponendid. Üldiselt tehakse seda järgmiselt:

(add-hook "slime-load-hook (lambda()) (nõua "slime-scheme)))

See käsk installib tööks vajalikud konksud LIMA, kuid võib-olla peate seda tegema iga toetatud murde puhul lisaseaded vastavalt juhistele, mis sisalduvad vastavas failis - swank-kawa.scm või swank-mit-scheme.scm.

Ja kõik muu, mis on seotud tööga LIMA, mida on kirjeldatud vastavas jaotises.

Vaikimisi on lubatud töötada ainult üks skeemiprotsess. Kuid saate paketti kasutada, kui peate käivitama mitu protsessi korraga.

Lisaks kohaletoimetamine bmacs saadaval ka paketid cee, mis on ette nähtud Bigloo laiendite kirjutamiseks kasutatava C-koodi redigeerimiseks, bug-mode, mis toetab Bigloo silurit ja ude(Unix Development Environment), mis rakendab koostamise tuge ja erinevad kommunaalteenused, mida kasutatakse Biglooga töötamisel.

Väärib märkimist, et kui Makefile'i ei eksisteeri, siis käivitab see funktsioon käivitatava mooduli kompileerimise ühest failist.

nn kiiksuga- moodul.

Kõik skeemiga seotud komponendid asuvad distributsiooni alamkataloogis contrib SLIME, seega ärge unustage seda oma otsinguteedele lisada.

Millist keelt valida programmeerimise õppimiseks?Programmeerimist ei tohiks hakata õppima kuskilt keskelt.

Kõigepealt tuleb treenida oma aju, oskust luua algoritme ja neid kirjeldada, teades konkreetse keele võimalusi. Kodumaistes koolides ja ülikoolides õpetatakse programmeerimist tavaliselt Basicu või Pascali näitel. Siiani peetakse Pascalit üheks parimad keeled treeningu jaoks on see range kõne staatilise trükkimisega, mis võimaldab ilma tarbetuid probleeme harjutada protseduurilise ja objektorienteeritud programmeerimise põhimõtteid. Kuid olles tutvunud juhtivate Lääne ülikoolide (Berkeley, Stanford, MIT) õppematerjalidega, nõustun, et oleks hea mõte alustada õppimist mõne funktsionaalse keelega.

Üldiselt on see üsna kummaline, kuid funktsionaalset paradigmat ignoreerib kodune haridus visalt. Selle lünga ületamiseks tahaksin rääkida programmeerimiskeelest Scheme.

Skeem on väga lihtne programmeerimiskeel. See on täiesti võimalik ühe päevaga selgeks õppida, kuid see lihtsus on petlik. Skeem on ka väga võimas keel. Rakendusi on tohutult palju.

Sertifitseerimisprogrammid salvestatakse *.scm-failidesse või saate neid kasutada interaktiivne režiim tõlk, sarnane Pythoniga.

Konstandid ja muutujad

Alustame skeemi põhistruktuuride õppimist. Kõigepealt määratleme konstandid:

123 - täisarv

3,1415926 - murdarv

2 + 3i - kompleksarv

2/3 - murdosa

#B1111 – kahendnumber

#xFF – kuueteistkümnendarvuline artikkel

#O123 - kaheksandnumber

#\A – üks märk

"Tere, Maailm!" - Tähemärkide jada

"Tere – sümbol

#f - loogiline väärtus

Konstante saab kasutada operaatorite või funktsioonide abil. Lõppude lõpuks on skeem funktsionaalne keel, seega on sellel kõik funktsioonid.

Matemaatikas tunnete funktsioonide f (x) või t (a, b) kirjutamise vormi. Kuid sama asja saab kirjutada kujul (f x) või (t a b). Täpselt sellist salvestusvormi Scheme kasutab. Mitte aritmeetilise avaldisena, mis kirjutatakse näiteks kujul 2 + 3, vaid eesliites - (+ 2 3).

Nt:

guile> (+ (* 3 4) (/ 5 2))

29/2

guile> (+ 1 1 1 1 1)

kavalus> (/2)

kaval> (2 ruut)

1.4142135623731

Muutujate deklareerimiseks kasutage konstruktsiooni (määratlege väärtuse nimi)

guile> (defineerige 2)

guile> (defineeri b 2)

kavalus> (+ a b)

Juba olemasoleva muutuja väärtust saab muuta konstruktsiooniga (set! name value)

guile> (komplekt! a 5)

kavalus>a

Funktsioonide deklareerimiseks kasutatakse konstruktsiooni (define (parameetri nimi) funktsiooni_tüüp)

guile> (defineeri (ruut x) (* x x))

guile> (ruut 3)

Rekursiooni demonstreerimiseks toon faktoriaali arvutamise näite:

(Defineeri (fakt x)

(Kui (= x 1)

(* X (fakt (- x 1)))))

Nagu juba aru saite, saab seisukorda kontrollida konstruktsiooni abil (kui seisukorda mingil viisil)

Detailidesse laskumata juhin tähelepanu põhifunktsioonidele

(Kuva "Tere, maailm!") – stringi kuvamine

(Rea uus) – minge uuele reale

Andmekogumitega töötamiseks on mugav kasutada loendeid

guile> (määratlege numbrid (loetelu 1 2 3 4 5 6 7 8 9 10)) - loendi deklareerimine

guile> (nimekirja viitenumbrid 0) - loe elementi numbriga 0

guile> (auto numbrid) - loe esimene element

guile> (cdr nums) – loeb kõiki teisi elemente

(2 3 4 5 6 7 8 9 10)

Saate töödelda kõiki loendi elemente korraga

luua uus loend, rakendades igale elemendile funktsiooni

guile> (kaardi ruudunumbrid)

(1 4 9 16 25 36 49 64 81 100)

guile> (kaart (lambda (x) (* x 3)) numbrid)

(3 6 9 12 15 18 21 24 27 30)

Lambda-konstruktsioon võimaldab deklareerida funktsioone vastavalt vajadusele ilma neile nimesid andmata. Kui programmeerite Pythonis, teate juba neid konstruktsioone.

Tegelikult pole skeemil silmuseid, nagu need on kohustuslikud keeled. Siin kasutatakse samadel eesmärkidel rekursiooni. Näiteks kuvame loendi sisu veerus

(Defineeri (prindiloendi lst)

(Kui (mitte (null? Lst))

(Alusta (ekraan (auto lst))

(Uus rida)

(Prindiloend (cdr lst)))))

Konstruktsiooni (alusta ...) kasutatakse juhul, kui peate sisestama mitu operaatorit, kui süntaks lubab ainult ühte.

Järgmine konstruktsioon võimaldab simuleerida teistest programmeerimiskeeltest tuntud for-tsüklit:

(Lase silmus ((i 1))

(Kuva i)

(Uus rida)

(Kui (<= i 10) (loop (+ i 1))))

Konstruktsiooni let kasutatakse siis, kui teil on vaja avaldises deklareerida kohalikud muutujad või kui teil on vaja deklareerida pesastatud funktsioon. Nii saab rakendada peaaegu kõiki võimalikke tsüklivalikuid. Muidugi saate tähistuse lühendamiseks alati luua oma funktsiooni, kuna funktsioone saab edastada parameetritena teistele funktsioonidele, nagu lihtsaid andmeid. Üldiselt võimaldab skeem teil keelt oma maitse järgi kohandada. Hämmastavalt paindlik keel.

Näiteks võite anda funktsiooni teostuse kindla integraali arvutamiseks

(Defineeri (func x)

(Defineeri (integreeri a b e f)

(Defineeri summa 0)

(Lase silmus ((i a))

(Kui (

(Määra! Summa (+ summa (* (f i) e))

(silmus (+ i e)))))

summa)

(Ekraan (integreerige 0 1 0.01 func))

(Uus rida)

Guile ametlik veebisait

Schemers.org

Videosalvestused Berkeley ülikooli kursuse The Structure and Interpretation of Computer Programs loengutest

Üldiselt, kuna skeem on akadeemiline keel, on selle kohta palju teavet. Samal ajal ei võimalda selle keele oskus mitte ainult heita pilku erinevatele konstruktsioonidele teistes keeltes (näiteks Python).

Sissejuhatus

Skeem- funktsionaalne programmeerimiskeel, üks kahest meie aja kuulsaimast keelemurdest Lisp. Guy L. Steele Ja Gerald Jay Sussman Massachusettsi Tehnoloogiainstituudist ( MIT) – lõi selle 1970. aastate keskel. Täpselt nii Skeem on pikka aega kasutatud MIT programmeerimise õpetamiseks (nüüd on asendatud Python) ja täpselt sisse Skeem näited on kirjutatud kuulsas raamatus "Arvutiprogrammide struktuur ja tõlgendus"- iga endast lugupidava programmeerija piibel.

IDE jaoks Varjutus seal on plugin, mis võimaldab teil sisse programmeerida Skeem. Selles artiklis vaatleme selle pistikprogrammi põhifunktsioone, uurime selle kasutamise protsessi ja konfiguratsiooniprotseduuri.

Pluginat nimetatakse SchemeScript ja on osa projektist SchemeWay. Selle pistikprogrammi uusima versiooni saate veebisaidilt alla laadida (pärast allalaadimist lihtsalt kopeerige jar fail kataloogi eclipse/pluginad). Projekt areneb aktiivselt, uusimat versiooni nimetatakse 1.3.0 alfa10 ja avaldati 05/09/2010 Lähtekood on saadaval aadressil GitHub. Lisainfo pistikprogrammi kohta, mõned nipid, mida see võimaldab SchemeScript, ja selle võimalused leiate blogist Dominique Boucher- selle laienduse autor.

Väärib märkimist, et isegi uusim versioon SchemeScript sisse ei tööta Eclipse Helios, nii et praegu keele arendamiseks Skeem tuleks kasutada Galileo varjutus.

UPD 17.07.10: GitHubi uusim versioon töötab Eclipse Helios, kuid see tuleb koostada allikatest. Mõne aja pärast lubas Dominic distributsiooni uuesti üles ehitada.

Varjutus- perspektiiv Skeem

Pärast pistikprogrammi installimist on see saadaval Varjutus- perspektiiv Skeem. Vaikimisi näeb see välja selline:

Perspektiiv sisaldab vaadet (terminites Varjutus) projekti navigaator - Navigaator, vaade, mis näitab redigeeritud faili sõelutud sisu - Kontuur, kus kuvatakse konstantide ja funktsioonide definitsioonide loend ning kaks ahendatud vaadet: vaade ikooniga tähe lambda kujul - Definitsioonid ja vaadata konsool.

Peamenüüsse Varjutus lisatud käskude rühm Skeem, mis on mõeldud peamiselt tõlgi juhtimiseks. Kiirkäivituspaneel sisaldab kolme nuppu (varustatud lambda-tähe kujul olevate ikoonidega) vasakult paremale: käivitage tõlk, taaskäivitage tõlk ja peatage tõlk.

Enne redaktoriga töötamist peate looma Varjutuse projekt, mis salvestab lähtekoodifailid. Spetsiifiline Skeem projekti tüüpi pistikprogramm SchemeScript ei paku, seega peate kataloogist looma tavalise projekti Kindral:

Loodud projekt kuvatakse navigaatoris:

Nüüd saate projektis teostada Uus -> fail ja looge fail, mis on mõeldud lähtekoodi salvestamiseks Skeem. Sellel failil peab olema laiend .ss või .scm. Nende laienditega faile redigeeritakse paketis sisalduva spetsiaalse redaktori abil SchemeScript.

Lähtekoodi redigeerimine

SchemeScript pakub keelele lähtekoodi redaktorit Skeemüsna rikkalike võimalustega. Vaatame neid lähemalt.

Kõigepealt väärib märkimist paarissulgude esiletõstmine. Koodi redigeerimisel Lisp-nagu keelte puhul on see omadus vajalik, sest igas enam-vähem keerulises konstruktsioonis võib segadusse sattuda, milline avasulg millisele sulgevale vastab.

Redaktor sisaldab sisseehitatud S-avaldiste õigsuse analüsaator. Kui näiteks sulgev sulg jäetakse välja, genereeritakse veateade:

On ka selline kasulik asi nagu automaatne asendamine või väljenduse lõpetamine. See tähendab, kui vajutate tippimisel Ctrl + tühik, siis avaneb aken, kus on võimalikud valikud sisestatud struktuuri lõpuleviimiseks:

Definitsioonide loomisel (näiteks kasutades märksõna määratleda) lisatakse need vaatele Kontuur, mis võimaldab teil vajadusel kiiresti soovitud definitsioonile juurde pääseda:

Sisse panema SchemeScript lisab koodiredaktori kontekstimenüüsse kaks üksuste rühma: Allikas- sisaldab käske lähtekoodi redigeerimiseks - ja Eval- sisaldab käske selle tõlgendamiseks:

Mõelge menüüpunktide rühmale Allikas:

Otsige määratlust- otsib lähtekoodist sümboli definitsiooni. See tähendab, et näiteks peame vaatama, kuidas sümbol on määratletud ruut. Selleks asetage kursor selle märgi järele

ja vajutage F12. Kursor liigub funktsiooni definitsiooni juurde ruut ja see määratlus tõstetakse esile:

Täielik sümbol- Oleme selle käsuga juba tuttavaks saanud;

Kirjeldage sümbolit- kuvab tööriistaspikri koos sümboli kirjeldusega. Näiteks sümbol, mida käsitlesime eelmises näites ruut on funktsioon:

Sisesta päise kommentaar- lisab lähtekoodifaili algusesse globaalse kommentaari. Seadistustes (vt allpool) saate sellise kommentaari jaoks määratleda mõned väljad - autor, autoriõigus jne.

Sisesta peatüki kommentaar- lisab teatud koodiplokile kommentaari - funktsioonide ja definitsioonide komplekti.

Sisesta jaotise kommentaar- lisab kommentaari konkreetsele funktsioonile või definitsioonile.

Kommentaari vahetamine- kommenteerige / tühjendage valitud koodiplokk. Kui koodiplokk ei ole kommentaar, lisatakse sellele algustähed ";":

Ja vastavalt ka vastupidi - kui mõnda väljendit kommenteeritakse, eemaldatakse kommentaarisümbolid:

Tihendage tühikud- eemaldab täiendavad eelnevad ja järgnevad tühikud ning reavahetused. Midagi funktsiooni sarnast trimmi:

Vorming- vormindab koodi vastavalt määratud sätetele. Taandab, eemaldab lisatühikud ja reavahetused.

Kood enne vormindamist

Kood pärast vormindamist

Vahetage S-avaldised- muudab sama pesitsustaseme S-avaldiste järjekorda. Näiteks kui eelmises näites käivitate selle käsu, siis nimekirja Ja lambda vaheta kohad:

Punktis Skeem peamenüü Varjutus sisaldab käsku Leidke skeemi sümbol(saadaval ka aadressil Ctrl + F12). Selle käsu kutsumisel kuvatakse dialoogiboks, mis võimaldab teil kiiresti leida soovitud funktsiooni definitsiooni. Näiteks on meil lähtekoodifailis defineeritud funktsioon ruut, kui põllul Sisestage sümboli eesliide: sisestage dialoogiboks ruut, siis põllul Sobivad sümbolid ilmub koodis määratletud funktsioon ruut:

Kui põllult Sobivad sümbolid Kui valite selle funktsiooni, liigub kursor redaktoris automaatselt kohta, kus see on määratletud. Oletame, et meil on mitu lähtekoodiga faili ja igaühes on määratletud funktsioon ruut. Seejärel tuleb lisaks funktsioonile endale valida ka fail. Selleks kasutage vormi Definitsioonid, kuhu pärast funktsiooni valimist paigutatakse teave selle määratluse valikute kohta erinevatest failidest:

Tõlgendamine

Kui kood on kirjutatud, soovite seda kontrollida, näiteks käivitades selle tõlgiga Skeem. Sisse panema SchemeScript pakub selleks ka võimalusi. Esiteks see punkt Skeem peamenüü Varjutus, mis sisaldab käske soovitud tõlgi valimiseks ja juhtimiseks: start, restart ja stop (vajalik, kui rakendus ripub nt igavene silmus. Sest Skeem saab optimeerida saba rekursiooni, igavene silmus on tõesti igavene).

Joonisel on näidatud tõlgi valimise võimalused. Esiteks see - Väline tõlk- ühendab samasse masinasse installitud välise tõlgi Varjutus. Tõlgid Skeem nüüd palju, all Windows võid kasutada näiteks Chez skeem.

Manustatud Kawa- sisaldub tarnekomplektis SchemeScript tõlk Kawa. Arendatakse egiidi all GNU peal Java raamistik kõrgetasemeliste ja dünaamiliste keelte juurutamiseks, millest kood kompileeritakse Java baitkood. Muudab koodis kasutamise lihtsaks Skeem Java klassid ja seetõttu hea skriptikeelena. Lisaks tõlgile sisaldab see ka kompilaatorit, mis võimaldab seda kasutada täieõigusliku keelena JVM kuidas neid kasutatakse Scala, Groovy Ja Clojure. Mõned entusiastid kasutavad Kawa platvormil töötavate rakenduste arendamiseks Android.

Kaugtõlk- võimaldab valida tõlgiks spetsiaalse serveri, mis töötab teises masinas. Näiteks instituudis saate programmeerimist õpetades seadistada spetsiaalse serveri, mis suudab tõlgendada Skeem-kood. Interaktsioon SchemeScript ja see tõlk viiakse läbi võrgu kaudu.

SISC tõlk- sisseehitatud REPL alates Skeemikoodi teine ​​tõlk- sisse kirjutatud Java tõlk Skeem.

Pärast jooksva tõlgi valimist näiteks Kawa, tuleb see käivitada kiirkäivituspaneeli vastava menüükäsu või nupuga:

Käskude rühma kasutatakse otse koodiosade tõlgendamiseks saatmiseks Eval koodiredaktori kontekstimenüüst:

See rühm sisaldab järgmisi käske:

Eval tippväljendus- käivitab kõrgema taseme avaldise võrreldes sellega, milles kursor asub. Kui kursor asub enne viimast sulgevat sulgu – vaata joonist

ja see käsk täidetakse, laaditakse funktsiooni definitsioon tõlgendajasse ruut.

Eval eelmine väljend- käivitab eelmise avaldise kursori suhtes. Kui näites

selle käsu käivitamisel laaditakse avaldis tõlgendajasse (* x x), mida ta täita ei suuda, sest parameeter x määramata:

Laadige fail Interpreteris- laadige fail interpretaatorisse, st. käivitada tõlgis kogu faili sisu.

Vaatame näidet: arvutava funktsiooni jaoks on kood n- e Fibonacci number. Tahame arvutada neljanda Fibonacci arvu:

Kui käivitate käsu Eval eelmine väljend pärast (fib 4), siis tekib viga: tõlk ei tea funktsiooni definitsiooni fib:

Kui käivitate käsu Laadige fail Interpreteris, ja siis - Eval eelmine väljend, siis läheb arvutus õigesti:

Toetus Kawa REPL

Read-eval-print loop (REPL)- lihtne interaktiivne programmeerimiskeskkond, sellesse keskkonda saab kasutaja sisestada avaldisi, mida hakatakse koheselt arvutama ning arvutustulemusi kuvatakse kasutajale.

osa Kawa selline keskkond on kaasatud. Näiteks saate defineerida funktsiooni otse konsoolis, kui tõlk töötab summa ja arvutage selle väärtus mõne argumendi suhtes (iga rida käsitletakse ühe avaldisena):

Lisaks on seal ka vaade Kawa Stack Trace, mis võimaldab teil silumise ajal jälgida kõnepinu olekut. Et mõista, kuidas seda kasutada, simuleerime viga, näiteks kutsume funktsiooni, mis arvutab argumendist arvu ruudu "ss":

Kawa ei saa selle avaldise väärtust hinnata ja kuvab tüübikonversiooni vea:

Virna jälg näeb välja selline:

Kui vormis vajutada Kawa Stack Trace nuppu Kuva ainult skeemi raamid, siis kuvatakse kogu pinu jälg, sealhulgas erandolukorrad sisse kirjutatud koodis Java, ja mitte ainult peal Skeem:

Seaded

Sisse panema SchemeWay on arenduskeskkonnale üsna paindlik laiendus Varjutus. Kõigi selle võimaluste mõistmiseks peaksite kindlasti kaaluma seadeid. Seadete puu algab rühmaga Skeem:

Lehel Skeem Saadaval on järgmised seaded:
- Kuvatakse vahekaart koos- võimaldab määrata tabeldusmärgi kuvamise laiuse (tühikutes). See toimib ainult siis, kui meeskond tavaliselt vahekaarte tühikutega ei asenda.
- Luba struktuurne redigeerimine- märkeruut vastutab struktureeritud redaktori lubamise/keelamise eest Skeem. Struktureeritud redaktor ei tööta mitte sümbolite, vaid tervete S-avaldistega. Need. Kõrval tagasilükkeklahv, näiteks kustutatakse korraga kogu S-avaldis. Samuti lisatakse sulgu avades kohe paariline sulgev.
- Salvesta... Ja Laadi... võimaldavad salvestada ja vastupidi - laadida - seadeid SchemeScript kuni/kust .epf-fail/a.

Lehekülg Välimus vastutab toimetaja välimuse eest. Võimaldab määrata värvi, millega seotud sulg esile tõstetakse (rühm Sobitatud sulg), redaktori taustavärv (rühm Taust) ja süntaksi esiletõstmiseks kasutatavad värvid (rühm Esiplaan).

Ülaltoodud joonisel on näide stringikonstantide sinise värvi määramisest.

Lehekülg Kommentaarid vastutab kommentaaride kuvamise eest. See sisaldab järgmisi seadeid:
- Kommentaaride eesliide- prefiks, millega kommentaar algab. Vaikimisi - kaks semikoolonit ( ;; ).
- Autorivälja sisu- välja Autor sisu, võimaldab määrata koodi autori ees-/perenime.
- Autoriõiguse välja sisu- välja Autoriõigus sisu võimaldab teil määrata autoriõiguse teavet.
- Jätka kommentaari automaatselt eelmiselt realt- kui see ruut on märgitud, siis vajutamisel Sisenema peale uue rea kommentaari jätkub kommentaar, st. algab uus rida ;; .

Lehekülg Kiired Evali võtmed võimaldab määrata käske (st nimesid Skeem-funktsioonid), mis käivitatakse vastavate klahvikombinatsioonide vajutamisel. Vaikimisi kõigile Fast Eval Key 0...9 vastab klahvikombinatsioonile Alt-K, 0...9. Plugina aktiivsel kasutamisel moodustab iga arendaja meetodite nimede komplekti, mida ta pidevalt kutsub (näiteks meetod test, et käivitada mõnda testimiskoodi). Sellest lähtuvalt saab nende meetodite kutsumise määrata kiirklahvidele.

Lehekülg Treppimine kasutatakse koodi kirjutamisel/vormindamisel lisatavate taande konfigureerimiseks. Iga märksõna jaoks saate määrata selle argumentidele rakendatava taande sätte. Seadete tabel on paigutatud järgmiselt: veerus Sümbol on määratud märksõna, mille taanded on konfigureeritud. Veerg Treppimise skeem täpsustab taande skeemi. Skeemid on järgmised:
- vaikimisi- kõik alamväljendid on joondatud neid ümbritseva avaldise esimese märgi alla.
- määratlus- kõik alamväljendid on joondatud raamimise avaldisena + 2 tühikut (sarnaselt vormikujundusega määratleda).
- kui- kõik alamväljendid on joondatud raamimisavaldisena + 4 tühikut (sarnaselt vormi kujundusega kui).
- mitte ühtegi- puudub taane, kõik alamväljendid on joondatud samamoodi nagu ümbritsev avaldis.
- koos- kõige keerulisem joondusvorm, mida kasutatakse pikkade nimede ja/või suure parameetriloendiga funktsioonide puhul. Esiteks N-parameetrid on taandatud 4 tühikuga, ülejäänud - 2 tühikuga Vihje määrab väärtuse N. Selle vormi kasutamise näide on märksõna joondamine lase:

Lehekülg Tõlk võimaldab määrata koodi tõlgendamise ja parsimise sätteid. Seni on selliseid seadistusi kaks: - kui ruut on märgitud, siis fail salvestatakse enne tõlgendamiseks saatmist. Väldib vajadust meeles pidada muudatuste salvestamist enne nende tõlgendamist.
- Ümbritse väljendeid (alusta...)- kas tõlgendatud väljendeid vormi raamida (alusta...). Nagu ma aru saan, on see valik vajalik mõne interpretaatoriga töötamiseks, mis suudavad korraga täita ainult ühte S-avaldist.

Lehekülg Väline tõlk võimaldab määrata kasutatava välise tõlgi. Saate määrata järgmised valikud.
- Tõlgi nimi- tõlgi nimi
- Käsurida- käsurida, sealhulgas tõlgi täielik tee ja mõned suvandid, mida see tööks vajab.
- Töökataloog- tõlgi töökataloog on kataloog, mille suhtes ta arvutab failiteed.
- Viga Regexp- regulaaravaldis vea sõelumiseks. Tõlk loob veateateid mõnes oma vormingus, SchemeScript peab teadma, kuidas sellelt vigadega realt lähtekoodi vea asukoha kohta infot välja võtta. Näiteks selleks Kawa See regulaaravaldis on: [\t ]+at [^(]+\((.+):(+))\).

Ülaltoodud joonis näitab konsoolis töötavat välist interpretaatorit Chez-skeem.

Lehekülg Kaugtõlk sisaldab sätteid ühenduse loomiseks kaugtõlgiga – tõlgiga, mis töötab serverina ja kuulab kindlat porti. Sellest lähtuvalt võimaldab see leht määrata hostinime ja pordi, millel see kaugtõlk töötab.

Lehekülg Leksikaalsed laiendid haldab leksikaalseid laiendeid Skeem. Sisaldab kahte üksust:
- Käsitlege sulgusid ( või ()) vanematena- kas käsitleda lokkis ja nurksulge samamoodi kui ümaraid. Need. kas tõsta esile paar ja kas juhtida sulgude sidumist.
- Aktsepteerige identifikaatori osana sidekriips (#).- kas lubada räsi sümboli kasutamist identifikaatori nime osana (nagu ma aru saan, ei tööta see kõigi tõlkide puhul Skeem).

Viimane lehekülg - Süntaks- võimaldab paindlikult juhtida keele süntaksi töötlemist - lisada ja eemaldada rühmadest struktuure, mis mõjutab redigeerimisel süntaksi esiletõstmist. Sellel lehel on määratletud 5 rühma:
- Defineeri- definitsioonid sisaldavad märksõnu, millega definitsioonid algavad, näiteks - määratleda.
- Erilised nimed- spetsiaalsed nimega parameetrid, nt #!võti või #!puhata.
- Spetsiaalsed vormid- erivormid, nt kui, ja, lase jne. Tegelikult - põhiosa programmeerimiskeele märksõnadest.
- Mutaator- mutaatorid, st. olekut muutvad funktsioonid. Need on esile tõstetud teisiti kui funktsioonid, mis olekut ei muuda.
- Püsiv- konstandid nagu #!eof, #!null jne. Saate ka lisada #t Ja #f.

Saate igasse rühma lisada oma elemente, samuti kustutada olemasolevaid. See on enda arendamisel väga mugav DSL alusel Skeem ja sellega toimetajas töötamine. Lisaks variantide selgesõnalisele lisamisele saate igas rühmas määrata regulaaravaldise, mis sobib selle liikmetega.

See juhtub, kui lisate selle rühma Defineeri märksõna pavel:

Järeldus

Vaatasime võimalusterohket ja väga kohandatavat tööriista programmeerimiskeele arendamiseks Skeem keskkonnas Varjutus. See tööriist võimaldab teil redigeerida lähtekoodi ja suhelda paljude tõlkidega, sealhulgas sisseehitatud ja kaugtõlkidega. Kui võrrelda selle pistikprogrammi võimalusi sisse lülitatud arendustööriistadega Skeem, näiteks all Emacs, siis on need üsna võrreldavad (välja arvatud selliste pisiasjade puudumine nagu märksõna asendamine lambda kreeka tähe lambda sümbolile). Iga programmeerija, kes ei taha õppida Emacs saab kasutada Varjutus funktsionaalse programmeerimise või keelega alustamiseks Skeem, samuti probleemide lahendamiseks ja harjutusteks alates SICP. Samuti võib-olla kedagi huvitab arendusteema Skeem all JVM kasutades Kawa.

Tahaksin tänada autorit SchemeScript - Dominique Boucher, kes arendab seda utiliiti tasuta. Väärib märkimist, et pistikprogramm SchemeScript on avatud lähtekoodiga projekt ja iga programmeerija saab selle arendamisel abiks olla, lisades neile vajalikke funktsioone.

Z.Y. Tekkis mõte, et sama Skeem raske on õppida, sest pole huvitav - huvitavaid ülesandeid pole. Tavalised matemaatilised arvutused on ebahuvitavad ja isegi lihtne töö näiteks graafikaga nõuab platvormi ja teeke. Keelt on huvitavam õppida, rakendades seda mõnes ainevaldkonnas. Niisiis, SchemeScript + Kawa + Eclipse saab kasutada õppeplatvormina. Vaata näiteid alates SchemeScript(jar-failis kataloog näiteid), on seal päris huvitavaid.

Nagu tavaliselt, võite jätta oma kommentaarid või esitada küsimusi Tšeljabinski raske programmeerijale.

Mulle meeldis sõnum -

Sissejuhatus

Scheme'i väljatöötamisel pandi rõhku elegantsile ja keele lihtsusele. Keelefilosoofia on rõhutatult minimalistlik. Selle eesmärk ei ole koondada erinevaid kasulikke konstruktsioone ja tööriistu, vaid pigem eemaldada nõrkused ja piirangud, mis nõuavad keelele uute funktsioonide lisamist. Selle tulemusena sisaldab skeem minimaalselt primitiivseid konstruktsioone ja võimaldab teil neile tuginedes väljendada kõike, mida soovite. Näitena võime tuua välja, et keel kasutab silmuste korraldamiseks kahte mehhanismi:

  1. "jääk" või "saba" rekursioon saba rekursioon)
  2. iteratiivne lähenemine (mis kasutab vahetulemuse salvestamiseks ajutisi muutujaid).

Skeem oli esimene Lispi murre, mis kasutas eranditult staatilist (mitte dünaamilist) muutuja ulatust, tagas sabarekursiooni optimeerimise ja toetas Boole'i ​​andmetüüpe (tavaliselt ebamugavate T ja NIL asemel #t ja #f). See oli ka üks esimesi keeli, mida otseselt toetati jätk(Inglise) jätkud). Alates R^5RS-i spetsifikatsioonist on keel saanud erakordselt võimsa ja mugava vahendi süntaktiliste teisendusmustritel põhinevate makrode kirjutamiseks "hügieeniliselt". hügieeniline_makro). Skeem rakendab ka "prügikoristust". prügivedu), st mälu automaatne vabastamine objektidest, mida enam ei kasutata.

Keel kasutab põhiandmestruktuuridena loendeid ja ühemõõtmelisi massiive ("vektoreid"). Vastavalt deklareeritud minimalismile pole (veel) standardset süntaksit nimeliste väljadega tugistruktuuride jaoks, samuti OOP-tööriistu - kõike seda saab programmeerija oma eelistuste kohaselt rakendada, kuigi enamik keelerakendusi pakub valmis mehhanisme. .

Kurioosumina võib märkida, et keele Schemer algne nimi muudeti praeguseks seoses tolleaegse failinimede pikkuse piiranguga ITS-is.

Näited

Lihtsad matemaatikatehted

(+ 2 (* 2 2 ) ) (+ 1 2 3 4 )

Iga operatsiooni (või funktsiooni) kutse esitatakse loendina, milles operatsiooni sümbol (mis on sisuliselt funktsiooni nimi) on alati algpositsioonil.

Tüüp predikaadid

(number? 5 ) (number? "foo" ) (string ? "foo")

Kokkuleppeliselt lõpevad kõigi predikaatide nimed sümboliga? .

Võrdsuse kontrollid

(ekv? "foo" "bar" ) (ekv? 5 (+ 2 3 ) ) (ekv? (ekv? 2 3 ) (ekv? 3 4 ) )

Makrode määratlemine traditsiooniliste push/pop operatsioonide jaoks

(define-syntax push! (syntax-rules () ((push! x l ) (set! l (cons x l ) ) ) ) (define-syntax pop! (syntax-rules ()) ((pop! l ) (las ( (x (auto l ) ) ) (komplekt! l (cdr l ) ) x) ) ) )

Funktsioonide määratlemine

;; faktoriaal (ebaefektiivses) rekursiivses stiilis(määratle (fakt x) (kui (< x 3 ) x (* (fact (- x 1 ) ) x) ) ) ;; Fibonacci funktsioon – nõuab topeltrekursiooni(määratle (fib n) (kond ((= n 0 ) 0 ) ((= n 1 ) 1 ) (muu (+ (fib (- n 1 ) ) (fib (- n 2 ) ) ) ) ;; loendielementide summa tüüpilises skeemi stiilis ;; (silmuse abifunktsioon väljendab tsüklit kasutades ;; saba rekursioon ja akumulaatori muutuja)(define (summa-loend x) (lase tsükkel ((x x) (n 0 ) ) (if (null? x) n (silmus (cdr x) (+ (auto x) n) ) ) ) (fakt 14) (fib 10 ) (summa "(6 6 6 100 ) ) (summa (kaardi fib "(1 2 3 4 ) ) )

Funktsiooni definitsioon peab vastama järgmisele prototüübile:

(määratle funktsiooni_nimi (lambda (argumentide_loend) (funktsiooni_rakendus) ) ,

kuigi praktikas kasutatakse sagedamini lühendatud vormi:

(define (funktsiooni_nime argumendid) (funktsiooni_rakendamine) ) .

Sisend väljund

(kirjutage (+ (loe) (loe)))

Lingid

Venekeelsed lingid

Ingliskeelsed lingid

Õpikud inglise keeles

  • Videoloengud “Arvutiprogrammide struktuur ja tõlgendamine”, Harold Abelson ja Gerald Jay Sussman
  • The Scheme Programming Language, R. Kent Dybvig

Wikimedia sihtasutus. 2010. aasta.

Vaadake, mis on "skeem (programmeerimiskeel)" teistes sõnaraamatutes:

    Programmeerimiskeel on formaalne märgisüsteem, mis on loodud arvutiprogrammide kirjutamiseks. Programmeerimiskeel määratleb leksikaalsete, süntaktiliste ja semantiliste reeglite komplekti, mis määravad programmi välimuse ja tegevused, ... ... Wikipedia