Programarea funcțională

Programarea funcțională ma atrăgat întotdeauna în opoziție cu imperativul.
Foarte adesea discut diverse aspecte ale programării funcționale pe diverse ramuri ale Marketplace.






Dar aș vrea să adun pe toți cei interesați de acest subiect într-o ramură.
Cred că este timpul să deschidem un astfel de subiect. Și de asta.

Din punct de vedere istoric, programarea funcțională a apărut aproape în legătură cu imperativul.
Cea de-a doua limbă după Fortran a fost liz.
Dar, din păcate, programarea funcțională pentru mult timp a fost o mulțime de institute de cercetare sau aplicații specializate (Inteligență artificială)
Desigur, întreaga lume nu ar trebui să fie considerată proști, deoarece dezvoltarea a mers pe calea limbilor lui Algol.
Au existat motive destul de obiective pentru acest lucru. Limbile funcționale sunt prea apropiate de om și sunt prea departe de mașină.
Mănâncă zeci de ori mai multe resurse decât limbile imperative.
Reamintim pretențiile făcute către java - primul limbaj imperativ cu o mașină virtuală și un colector de gunoi împins de marile corporații în mainstream.
Foarte frânează și mănâncă toată memoria ce este. Dar limbile funcționale (denumite în continuare "PO") toate fără excluderi au un colector de gunoi, o mașină virtuală.
Multe dintre ele (familia lizelor) sunt de asemenea dinamice, ceea ce agravează doar situația.
Este destul de natural ca, după ce au apărut cu mai mult de cincizeci de ani în urmă, aceștia sunt pentru mult timp înainte de timpul lor.

Pentru distribuția largă a FW, sunt necesare gigabytes de memorie ieftină și procesoare ieftine de la Gigahertz.
Au trecut mai mult de 50 de ani înainte ca astfel de cerințe pentru fier să devină o realitate.
De data asta a venit. ACUM.
Bine ați venit în noua eră a programării.

Total în 5500 de posturi

>> Total posturi în subiecte: 5500; pagini: 550; pagina curentă: 335

Răspunde la »mesajul 2157« (Bulat Ziganshin)
___________________________


qsort [] = []
qsort (x: xs) = mai mică ++ [x] ++ mai mare
unde (mai mică, mai mare) = partiție (

încercați să scrieți pe scurt orice alt YAP și chiar o procedură generică :)

Este partiția o funcție (sau o parte a unei limbi)?

Răspundeți la mesajul "mesaj 2124" (Max Belugin)
___________________________

Răspundeți la mesajul "mesaj 2123" (AVC)
___________________________


Logic continuați acest gând și cred că veți ajunge la aceeași suspiciune care a apărut în mine: în statul FP "plutește".

La etaj, aici este locul?

Răspunsul la mesajul "2155" (Bulat Ziganshin)
___________________________
îngrădirea copilului de mici dificultăți în copilărie,






Copil. Aceste blabby excesive deja în studiul institutului :)) Și sunt încă protejate, de la limba engleză, de la programarea funcțională. ))
Este vorba despre învățământul superior "înstrăinător" din Rusia.

Răspunsul la "mesajul 2117" (slavă)
___________________________

Mă întreb cum să implementez matricele de sortare rapidă (O (N log N)) într-un limbaj de programare funcțional?

Sunt puțin familiarizat cu Schema, și mărturisesc că nu înțeleg cum să o fac.

Citea biciul. ) liste de sortare prin îmbinare: considerăm că datele de intrare N sunt de aceeași lungime. apoi îmbinați fiecare două liste într-una singură. repetăm ​​acest lucru din nou și din nou celor victorioși

în general, cel mai scurt algoritm de sortare pe Haskell este doar un clasic:

qsort [] = []
qsort (x: xs) = mai mică ++ [x] ++ mai mare
unde (mai mică, mai mare) = partiție (

încercați să scrieți pe scurt orice alt YAP și chiar o procedură generică :)

Răspundeți la "mesaj 2134" (Geniepro)
___________________________

Răspundeți la mesajul "mesaj 2127" (Ruslan Bogatyrev)
___________________________

Pentru a purifica FP de la lucruri imperioase "extraterestre" (de obicei asociate cu comunicarea FP cu lumea exterioară), se folosește un astfel de concept ca monații (monade).

vei râde, dar în Haskell, de fapt, același lucru. monads - este un concept abstract, este o clasă de constructori de tip (și nu un tip) având operațiuni >> = și return care satisfac legile monadice. IO este unul dintre monade, adică constructor de tip specific. pentru utilizatorul lui Haskell, este important doar ca acest monad să reprezinte o provocare consistentă pentru operațiile imperative și cum este aranjat nu este afacerea lui. la început acest monad a fost implementat prin continuări, în toate compilatoarele moderne (surpriză, surpriză!) este implementat prin tipuri de unicitate. și cu eficiența bine, matrice sunt modernizate în loc, orice pierdere de utilizare a monadelor nu sunt - în cele din urmă generează un cod imperativ simplu

> E.Huvenen, J.Seppyanen. "Lumea lui Lisp"

M-am uitat recent. destul de primitiv. sunt date metode, dar nu există spirit de programare funcțională

> Engleză, din păcate, pentru studenții pe care îi avem ca chinezi.

ei nu vor supraviețui în această lume dură :) Serios, intenționat mi-ar le-a dat literatura de specialitate * * numai în limba engleză, pentru că este cunoașterea lor va fi mult mai important decât toate celelalte combinate. și, în special, în cazul în care se face referire la aici SICP de prezentare enumerate metodic și bine finlandezi. o slvoom, de protectie a copilului de la trudzhnostey mici în copilărie, creați-l probleme majore în viața szrolsoy - am avea cum spune un porgrammist necasatoriti si fara copii :)

Un prieten mi-a cerut să descriu Lisp.

Regulile BNF ale LISP
------------------
s_expression = atomic_symbol / "(" s_expression "." s_expression ")" / listă
list = "(" s_expression ")"
atomic_symbol = litera atom_part
atom_part = gol / literă atom_part / număr atom_part
litera = "a" / "b" / "." / "z"
numărul = "1" / "2" / "." / "9"
gol = ""

Răspunde la »mesajul 2149« (Ilya Ermakov)
___________________________

Deci, ea a cerut să arunce unele Literar începând din Lisp, care poate fi acordată studenților (așa cum am spus - capacitatea medie) pentru a începe în această direcție. Avem nevoie de ceva simplu în limba rusă, pentru engleza, din păcate, pentru studenții pe care îi avem ca chinezi.

Clasic printre traducerile Lisp:

E.Huvenen, J.Seppyanen. "Lumea lui Lisp"
Volumul 1. Introducere în Lisp și programarea funcțională 15 MBT
Volumul 2. Metode și sisteme de programare 12 MBT

>> Total posturi în subiecte: 5500; pagini: 550; pagina curentă: 335

Ora pe site: GMT minus 5 ore

Dacă observați o eroare de ortografie pe această pagină, evidențiați pur și simplu eroarea cu mouse-ul și apăsați Ctrl + Enter.
Este posibil ca funcția să nu funcționeze în unele versiuni ale browserului.







Articole similare

Trimiteți-le prietenilor: