Систем типова — разлика између измена

Садржај обрисан Садржај додат
Ред 181:
Многи статични системи куцања, као што су они у С-у и Јави, захтевају ''декларацију куцања''. Програмер мора експлицитно помоћи свакој варијабли са посебним куцањем. Остали, као што су Хаскел, користе ''[[закључно куцање]]'': Компилатор изводи закључке о куцањима променљивих базираним на томе како програмери користе те променљиве. На пример, дата фунцкија  <code class="mw-highlight" dir="ltr"><span class="n">f</span><span class="o">(</span><span class="n">x</span><span class="o">,</span> <span class="n">y</span><span class="o">)</span></code><code class="mw-highlight" dir="ltr"></code> која додаје <code class="mw-highlight" dir="ltr"><span class="n">x</span></code><code class="mw-highlight" dir="ltr"></code> и <code class="mw-highlight" dir="ltr"><span class="n">y</span></code><code class="mw-highlight" dir="ltr"></code> заједно, компилатор може закључити да <code class="mw-highlight" dir="ltr"><span class="n">x</span></code><code class="mw-highlight" dir="ltr"></code> и <code class="mw-highlight" dir="ltr"><span class="n">y</span></code><code class="mw-highlight" dir="ltr"></code> морају бити бројеви – пошто је адиција само дефинисана за бројеве. Због тога, сваки позив на <code class="mw-highlight" dir="ltr"><span class="n">f</span></code><code class="mw-highlight" dir="ltr"></code> другде у програму који спецификује не-бројив тип (као што је стринг или листа) као аргумент би дао грешку.
 
Нумеричке и константе стринг и експресије у коду могу и често подразумевају куцање у одређеном контексту. На пример, експресија <code class="mw-highlight" dir="ltr"><span class="mf">3.14</span></code><code class="mw-highlight" dir="ltr"></code> може подразумевати [[Децимална тачка|децималну тачку]], док <code class="mw-highlight" dir="ltr"><span class="o">[</span><span class="mi">1</span><span class="o">,</span> <span class="mi">2</span><span class="o">,</span> <span class="mi">3</span><span class="o">]</span></code><code class="mw-highlight" dir="ltr"></code> може подразумевати листу целих бројева - типично [[Низ (структура података)|низ]].
 
Тип закључка је у генералном могућ, ако је [[Одлучивост|одлучив]] у теорији куцања у питању. Штавише, зак иако је закључак неодлучив у генерали за дату теорију куцања, закључак је често могућ за велике подсетове стварних програма. Хаскелов систем куцања, верзија [[Хиндлеј-Милнер|Хиндлеја-Милнера]], је рестрикција [[Систем F-омега|Система F-омега]] тако званом ранка-1 полиморфног куцања, у чијем случају је закључак одлучив. Већина Хаскелових компилатора дозвољавају алгебарски-ранк полиморфизма као екстензију, али ово чини куцање закључка неодлучивим. (провера куцања је одлучива, међутим, и ранк-1 програми идаље имају закључак; полиморфни програми вишег ранка су одбијени осим ако не дају експлицитне записе)
 
== Типови куцања ==