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)
___________________________
î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) La etaj, aici este locul? Răspunsul la mesajul "2155" (Bulat Ziganshin) 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 [] = [] î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 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" >> 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.
qsort [] = []
qsort (x: xs) = mai mică ++ [x] ++ mai mare
unde (mai mică, mai mare) = partiție (
___________________________
___________________________
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".
___________________________
î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.
___________________________
qsort (x: xs) = mai mică ++ [x] ++ mai mare
unde (mai mică, mai mare) = partiție (
___________________________
___________________________
------------------
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 = ""
___________________________
Volumul 1. Introducere în Lisp și programarea funcțională 15 MBT
Volumul 2. Metode și sisteme de programare 12 MBT
Este posibil ca funcția să nu funcționeze în unele versiuni ale browserului.Articole similare