Introducere în schema de limbă pentru studenți

Știi foarte bine românește, ar putea vorbi deja în limba engleză, în școală ați fost învățați un limbaj neobișnuit de matematică. Vă sugerez să învețe o alta - Lisp. Mai precis, una dintre cele mai interesante dialecte - Schema (glet).

În primul rând, uita-te la un ordin de cuvânt oarecum neobișnuit de această limbă: „acțiune - obiect“. Dar este neobișnuit numai în comparație cu cele mai populare limbaje de programare. în limba română este o secvență de mai puțin frecvente:

  • trei și cinci sumă.
  • Produs de cinci, șase și șapte.
  • Cumpără la pâine de panificație.

Fiecare frază terminat în această limbă trebuie să fie înconjurată de o pereche de paranteze. Scriem cele de mai sus în schema:

Pot fi scrise de expresie și mai complexă:

„Cumpără la pâini de panificație: doi plus unu mai mult.“ Simplu, nu-i așa? Să mergem mai departe. Fraza (* 3 5) bun și (* latime inaltime) - mai bine. Expresia (2 * 3.1415926 5) - intrigant, și (2 * raza pi) este mult mai semnificativ. Aici lățime. înălțime - variabilă, și 3 și 5 - valorile lor curente.

O variabilă este definită de următoarea Limba de construcție:

Citește înregistrată în limba rusă „width set - este 3, înălțimea - este 7, se calculează produsul dintre cele două sume și lățimea și înălțimea (de exemplu, perimetrul dreptunghiului).“ Rezultatul acestor calcule, în acest caz este de 20.

Vom continua să se îmbunătățească design. Să presupunem că vrem să calculeze suma pătratelor celor două numere. Acest lucru se poate face, de exemplu, după cum urmează:

Acel ceva este greșit; noi, de obicei, în loc de „Multiply variabilă în sine,“ spune „Cuadratura variabila“ la un leu tânăr - pătrat:

„Suma pătrat și un pătrat b». Există o problemă - are o soluție. Putem declara o nouă funcție cuvânt, suna-l pătrat. Funcția va accepta ca parametru numărul și returnați-l la pătrat. Acest lucru se face după cum urmează:

Funcția returnează ultima valoare calculată. Acest lucru înseamnă că următoarele funcții square2:

se va întoarce la același rezultat ca și pătrat. înainte ca înmulțirea doi câte doi, fără nici un efect. Rescrie exemplul suma pătratelor numerelor din nou:

Nu avem suficiente cuvinte în limba - le-am adăugat. În general, atunci când scrieți un program în Lisp, pe care o descrii nu este un algoritm, ci creați mai întâi o limbă, și apoi să formuleze problema originală pe ea. Mai multe exacte - vă „personalizați“, a vă limba schema, atâta timp cât nu se va potrivi cu limba în care problema poate fi formulată cu ușurință.

Imediat exemplu. Să sarcina noastră este de a face un program care solicită numele de utilizator, și apoi afișează un salut pentru el.

Schema ne dă niște „verbe“ gata:

citește pentru a citi numele, afișa ieșirea ceva pe ecran, NEWLINE concluzie NEWLINE.

Ne-ar dori să aibă „verbele“:

salut pentru a saluta cu un singur parametru - numele de utilizator; utilizatorul pentru numele de utilizator, fără parametri.

Sarcina noastră ar arăta astfel:

Cazul de mici - pentru a determina salutul și utilizatorului. Nici o problemă. Iată textul integral al programului.

Lisp - o limbă cu drepturi depline funcționale, și, prin urmare, funcția - membru cu drepturi depline al acestei limbi, indiferent dacă le definiți le sau au fost pregătiți în limba. În special, acestea pot fi transmise ca parametri la alte funcții, dar deja este de a face cu ei tot ce este nevoie. De exemplu, funcția „numărul modulului“ poate fi definit după cum urmează:

„Noi definim că funcția ABS returnează argumentul său dacă este pozitiv, sau - -X». Sau s-ar putea dori:

“... dacă argumentul este pozitiv, în plus, sau minus x». Aici funcția + returnează un rezultat dacă expresia sau execuție -. care se aplică apoi argumentul x. Eu cred că construcția de sens dacă vă imediat clar. În primul rând, verifică primul argument, dacă este adevărat, al doilea argument este executat, în caz contrar al treilea. Formatul general este după cum urmează:

În cazul în care să se uite și să încerce să editați

În teorie, totul este bine, și în cazul în care puțină practică? În lumea puteți găsi o mulțime de medii bine concepute pentru a lucra cu schema. Din păcate, cea mai mare parte a documentației pentru Schema în limba engleză, dar puteți găsi o excelentă introducere la rusă - limba simpla.

Aici sunt numele unora dintre cele mai comune implementari:

Una dintre cele Racket implementari mai complete, include un tutorial la îndemână Dr.Scheme miercuri. Există versiuni pentru platformele Windows. Linux. Mac OS. Bigloo, de asemenea, punerea în aplicare destul de completă. Disponibil pentru platformele Windows. Linux. Versiunea LispMe pentru Handhelds cu sistem de operare Palm OS.

De asemenea, uita-te mai Gambit-C, - unul dintre cele mai rapide compilator Schema.

Toate Schemei de punere în aplicare de mai sus - un interpret. Executați o coajă - și vă puteți purta un dialog cu el pe schema: ca răspuns la invitația sa de a intra în structura pe schema, si va returna rezultatele calculelor.


Încercați să „joace“ toate exemplele de mai sus. Cred că va place!

eXERCIŢII DE

A se vedea următoarele două implementări ale funcției de calcul factorial f (n) = 2 ⋅ 1 ⋯ n. Una dintre ele se bazează pe recursivitate. iar cealaltă - pe iterații. Scrie pe iterații recursive Scheme și bazate pe funcția de implementare exponentiation f (a. N) = a n>.

Opțiunea 1 Modificați

Editare Opțiunea 2