www.wikidata.uk-ua.nina.az
Cya stattya potrebuye uporyadkuvannya dlya vidpovidnosti standartam yakosti Vikipediyi Bud laska dopomozhit polipshiti cyu stattyu Mozhlivo storinka obgovorennya mistit zauvazhennya shodo potribnih zmin V teoriyi mov programuvannya linivi obchislennya abo viklik za potreboyu ce strategiya obchislennya pri yakij obchislennya virazu ne vikonuyetsya do togo momentu poki znachennya virazu ne stane potribnim ta unikayutsya povtorni obchislennya Perevagami linivih obchislen ye mozhlivist viznachiti potik keruvannya yak abstrakciyi zamist primitiviv mozhlivist viznachati potencijno neskinchenni strukturi danih Ce dozvolyaye realizovuvati deyaki algoritmi bilsh pryamolinijno pokrashennya produktivnosti za rahunok unikannya nepotribnih obchislen i nevikonuvanih gilok v umovnih virazah Linivi obchislennya zazvichaj kombinuyutsya z zapam yatovuvannyam Pislya obchislennya znachennya funkciyi dlya konkretnogo parametru abo naboru parametriv rezultat zberigayetsya v tablici indeksami yakoyi ye parametri Koli funkciya bude viklikana znovu bude zroblena perevirka chi mistitsya vzhe obchislene znachennya funkciyi z takimi parametrami v tablici Yaksho tak to zberezhenij rezultat povertayetsya Yaksho ni to znachennya funkciyi obchislyuyetsya i ce znachennya dodayetsya v tablicyu dlya povtornogo vikoristannya Linivi obchislennya mozhut privesti do zmenshennya vikoristannya pam yati tomu sho znachennya stvoryuyutsya lishe yaksho voni potribni Prote linivi obchislennya vazhko ob yednuvati z imperativnim programuvannyam napriklad u vipadku vvedennya vivedennya chi obrobki vinyatkovih situacij tomu sho poryadok operacij staye neviznachenim Takozh linivi obchislennya mozhut privesti do vitokiv pam yati Protilezhnimi do linivih obchislen ye strogi obchislennya yaki zastosovuyutsya v bilshosti mov programuvannya Zmist 1 Istoriya 2 Zastosuvannya 2 1 Umovni konstrukciyi 2 2 Robota z neskinchennimi strukturami danih 2 3 Inshi vikoristannya 3 Realizaciya 4 Linivist ta retelnist 4 1 Kontrolyuvannya retelnosti v linivih movah 4 2 Simulyaciya linivosti v retelnih movah 5 Zastosuvannya 5 1 NET Framework 5 2 Umovni konstrukciyi 6 Primitki 7 PosilannyaIstoriya RedaguvatiLinivi obchislennya buli rozrobleni dlya lyambda chislennya Kristoferom Vodsvortom i dlya mov programuvannya Piterom Hendersonom ta Dzhejmsom Morrisom i Deniyelom Fridmanom ta Devidom Vajzom Zastosuvannya RedaguvatiVidkladeni obchislennya v osnovnomu vikoristovuyutsya v funkcionalnih movah programuvannya Pri vikoristanni vidkladenih obchislen viraz ne obchislyuyetsya odrazu z prisvoyennyam zminnij rezultatu Tobto viraz x expression prisvoyennya rezultatu virazu do pevnoyi zminnoyi za zadumom obchislyuyetsya i zapisuyetsya do zminnoyi ale realno ce znachennya ne bude potribne i tomu ne obchislyuyetsya do togo momentu poki cya zminna ne z yavitsya v podalshih virazah obchislennya yakih ne mozhut buti vidkladeni Vidkladene obchislennya maye perevagu u obchislenni duzhe velikih abo neskinchennih spiskiv bez vikoristannya neskinchennih cikliv Napriklad mozhna stvoriti funkciyu sho stvoryuye neskinchennij spisok yakij zazvichaj nazivayetsya potik chisel Fibonachchi Obchislennya pevnogo chisla Fibonachchi bude prosto zvernennyam do vidpovidnogo elementu spisku Napriklad na movi Haskell spisok sho mistit vsi chisla Fibonachchi mozhe buti stvorenij tak fibs 0 1 zipWith fibs tail fibs Za umovi sho programist oberezhnij obchislyuyutsya tilki ti znachennya sho potribni dlya kincevogo virazu Prote pevni obchislennya mozhut prizvesti do togo sho programa namagatimetsya obchisliti neskinchenne chislo elementiv napriklad sproba otrimati dovzhinu spisku abo obchisliti sumu elementiv prizvede do togo sho programa zavershit robotu cherez nestachu pam yati Umovni konstrukciyi Redaguvati U bilshosti rozpovsyudzhenih mov programuvannya virazi if obchislyuyutsya linivim sposobom dzherelo U takomu zapisi if a then b else c obchislyuyetsya viraz a todi i tilki todi koli a ye istinoyu obchislyuyetsya viraz b v inshomu vipadku obchislyuyetsya viraz s Tobto odin z viraziv b abo s ne bude obchislenij Okrim togo yaksho v umovi a figuruye kon yunkciya abo diz yunkciya to viraz a za mozhlivistyu obchislyuyetsya za korotkoyu shemoyu Robota z neskinchennimi strukturami danih Redaguvati Bagato mov yaki nadayut mozhlivist stvoryuvati neskinchenni strukturi danih Ce dozvolyaye davati viznachennya danim na neskinchennih promizhkah abo za dopomogoyu rekursiyi Priklad takoyi programi na Haskell numberFromInfiniteList Int gt Int numberFromInfiniteList n infinity n 1 where infinity 1 main print numberFromInfiniteList 4 U funkciyi numberFromInfiniteList znachennya infinity ye neskinchennim promizhkom ale poki dijsne znachennya abo bilsh konkretno znachennya z konkretnim indeksom ne stane potribnim spisok ne obchislyuyetsya a pri obchislenni obchislyuyetsya tilki potribna chastina tobto do vkazanogo indeksu Inshi vikoristannya Redaguvati V operacijnih sistemah z vikonnim interfejsom vivedennya informaciyi na ekran keruyetsya podiyami vivedennya Vnaslidok cogo operacijna sistema unikaye nepotribnih obchislen dlya onovlennya ekranu Inshim prikladom linivosti v suchasnih komp yuternih sistemah ye kopiyuvannya pri zapisi pri yakomu pam yat vidilyayetsya lishe koli zberezhene znachennya zminyuyetsya Linivist mozhe buti korisnoyu dlya visokoyi produktivnosti Prikladom ye funkciya mmap v Unix yaka robit kerovane potreboyu zavantazhennya fajlu v pam yat tobto tilki ti chastini yaki realno vikoristovuyutsya zavantazhuyutsya i pam yat na nepotribni bloki ne vidilyayetsya MATLAB realizuye kopiyuvannya pri modifikaciyi za yakim masivi yaki kompilyuyutsya i zminyuyut svoye roztashuvannya u pam yati lishe koli yih zmist zminivsya Ale takij pidhid mozhe prizvesti do pomilki out of memory yaksho zminiti element pislya kopiyuvannya zamist zmini pid chas kopiyuvannya Realizaciya RedaguvatiDeyaki movi programuvannya vidkladayut obchislennya viraziv za umovchannyam inshi nadayut specialni funkciyi abo sintaksis dlya yih vidkladennya Napriklad obchislennya argumentiv funkciyi za umovchannyam vidkladayetsya v movah Miranda i Haskell V bagatoh inshih movah obchislennya mozhut buti zatrimani v yavnomu viglyadi z vikoristannyam specialnogo sintaksisu v Scheme delay i force v OCaml lazy i Lazy force Ob yekt yakij predstavlyaye taki vidkladeni obchislennya nazivayetsya linive majbutnye Perl 6 vikoristovuye linive obchislennya spiskiv tozh mozhna stvoryuvati neskinchenni spiski ta peredavati yih do funkcij ale na vidminu vid Haskell ta Miranda Perl 6 za umovchannyam ne vikoristovuye linivi obchislennya dlya arifmetichnih viraziv ta funkcij Linivist ta retelnist RedaguvatiKontrolyuvannya retelnosti v linivih movah Redaguvati U movah z linivim programuvannyam takih yak Haskell za umovchannyam virazi obchislyuyutsya lishe koli yih znachennya stane potribne v deyakih vipadkah mozhlivo zrobiti kod bilsh retelnim abo navpaki zrobiti obchislennya bilsh linivimi pislya togo yak voni buli zrobleni retelnimi Ce mozhna zrobiti ne vikoristovuyuchi yavni komand yaki forsuyut obchislennya sho robit kod bilsh retelnim abo unikayuchi takih komand sho robit kod bilsh linivim Pid strogimi obchislennyami zazvichaj rozumiyut retelnist ale tehnichno ce rizni koncepciyi Perevagami linivih obchislen ye Mozhlivist viznachiti potik keruvannya yak abstrakciyi zamist primitiviv Mozhlivist viznachati potencijno neskinchenni strukturi danih Ce dozvolyaye realizovuvati deyaki algoritmi bilsh pryamolinijno Pokrashennya produktivnosti za rahunok unikannya nepotribnih obchislen i nevikonuvanih gilok v umovnih virazah Odnak v deyakih kompilyatorah realizovana optimizaciya yaka nazivayetsya analiz strogosti yaka v deyakih vipadkah dozvolyaye kompilyatoru viznachiti chi bude zminna zavzhdi vikoristovuvatis V takih vipadkah vibir programista vikoristovuvati linivi obchislennya chi ni staye nepotribnim tomu sho analiz strogosti bude forsuvati strogi obchislennya Simulyaciya linivosti v retelnih movah Redaguvati PythonV Python 2 x funkciya range stvoryuye spisok cilih chisel Uves spisok zberigayetsya u pam yati pislya togo yak prisvoyennya bude vikonane Os priklad retelnogo abo negajnogo obchislennya gt gt gt r range 10 gt gt gt print r 0 1 2 3 4 5 6 7 8 9 gt gt gt print r 3 3 U Python 3 x funkciya range povertaye specialnij ob yekt yakij obchislyuye elementi spisku na vimogu Elementi cogo ob yektu generuyutsya tilki todi koli voni stayut potribni tobto koli v prikladi obchislyuyetsya print r 3 tozh ce bude prikladom linivih abo vidkladenih obchislen gt gt gt r range 10 gt gt gt print r range 0 10 gt gt gt print r 3 3 Cya zmina do linivih obchislen zberigaye chas vikonannya dlya velikih promizhkiv yaki nikoli ne budut povnistyu vikoristovuvatisya U Python 2 x ye funkciya xrange yaka povertaye ob yekt sho stvoryuye chisla u zadanomu promizhku na vimogu Perevagoyu funkciyi xrange ye te sho takij ob yekt bude zajmati odnu j tu samu kilkist pam yati Zastosuvannya Redaguvati gt gt gt r xrange 10 gt gt gt print r xrange 10 gt gt gt lst x for x in r gt gt gt print lst 0 1 2 3 4 5 6 7 8 9 Z versiyi 2 2 i dali Python rozshiriv linivi obchislennya realizaciyeyu iteratoriv linivi poslidovnosti na vidminu vid kortezhiv chi spiskiv Napriklad Python 2 gt gt gt numbers range 10 gt gt gt iterator iter numbers gt gt gt print numbers 0 1 2 3 4 5 6 7 8 9 gt gt gt print iterator lt listiterator object at 0xf7e8dd4c gt gt gt gt print iterator next 0 Cej priklad pokazuye yak spiski obchislyuyutsya pri vikliku ale u vipadku z iteratorom pershij element 0 drukuyetsya koli taka potreba vinikaye NET Framework RedaguvatiU frejmvorku NET linivi obchislennya mozhlivi z vikoristannyam klasu span class n System span span class p span span class n Lazy span span class o lt span span class n T span span class o gt span U F ye specializovani kolekciyi taki yak span class n Microsoft span span class p span span class n FSharp span span class p span span class n Collections span span class p span span class n Seq span u yakih ye vbudovana pidtrimka dlya linivih obchislen let fibonacci Seq unfold fun x y gt Some x y x y 0I 1I fibonacci gt Seq nth 1000U C i VB NET vikoristovuyetsya klas span class n System span span class p span span class n Lazy span span class o lt span span class n T span span class o gt span public int Sum int a 0 int b 0 Lazy lt int gt x new Lazy lt int gt gt a b a 3 b 5 return x Value returns 8 Za umovi sho programist oberezhnij tilki obchislyuyutsya tilki znachennya sho potribni dlya kincevogo virazu Prote pevni obchislennya mozhut privesti do togo sho programa namagatimetsya obchisliti neskinchenne chislo elementiv napriklad sproba otrimannya dovzhini spisku abo obchisliti sumu elementiv prizvede do togo sho programa zavershit robotu cherez nedostachu pam yati Bilsh praktichnij priklad recursive calculation of the n th fibonacci number public int Fib int n return n 1 1 n 2 1 Fib n 1 Fib n 2 public void Main Console WriteLine Which Fibonacci number do you want to calculate int n Int32 Parse Console ReadLine Lazy lt int gt fib new Lazy lt int gt gt Fib n function is prepared but not executed bool execute if n gt 100 Console WriteLine This can take some time Do you really want to calculate this large number y n execute Console ReadLine y else execute true if execute Console WriteLine fib Value number is only calculated if needed Inshij sposib vikoristannya klyuchovogo slova span class k yield span Umovni konstrukciyi Redaguvati eager evaluation public IEnumerable lt int gt Fibonacci int x IList lt int gt fibs new List lt int gt int prev 1 int next 1 for int i 0 i lt x i int sum prev next prev next next sum fibs Add sum return fibs lazy evaluation public IEnumerable lt int gt LazyFibonacci int x int prev 1 int next 1 for int i 0 i lt x i int sum prev next prev next next sum yield return sum obchislyuyetsya viraz a todi i tilki todi koli a ye istinoyu obchislyuyetsya viraz b v inshomu vipadku obchislyuyetsya viraz s Tobto odin z viraziv b abo s ne bude obchislenij Primitki RedaguvatiPosilannya RedaguvatiCya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno 13 bereznya 2021 Otrimano z https uk wikipedia org w index php title Linivi obchislennya amp oldid 35517333