Tipărire strictă - stadopedia

Având în vedere exemplul de sortare rapidă Hoare, puteți vedea că, în plus față de diferențele deja menționate între versiunea în C și una într-un limbaj funcțional abstract, există o diferență importantă: o funcție C sortează lista de valori int (întregi), iar funcția pe abstract limbaj funcțional - o listă de valori de orice tip, care aparține unei clase de cantități comandate. Prin urmare, ultima funcție poate sorta o listă de numere întregi, și o listă de numere în virgulă mobilă, și o listă de șiruri. Puteți descrie un tip nou. Definite pentru acest tip de operațiuni de comparație pot fi utilizate fără recompilare sortarerapidă și enumeră valorile acestui tip nou. Aceasta este o proprietate utilă a sistemului de tip numit polimorfism parametrice sau adevărat, și este susținută de cele mai multe limbi funcționale.







Un alt tip de polimorfism este supraîncărcarea funcțiilor, ceea ce face posibilă prezentarea unor nume diferite cu funcții similare, dar similare. Un exemplu tipic al unei operații supraîncărcate este operația de adăugare obișnuită. Funcțiile adiționale pentru numerele întregi și pentru numerele cu virgulă variază, dar pentru comoditate acestea au același nume. Unele limbi funcționale, în afară de suportul polimorfismului parametric și operațiile de reîncărcare.







În C ++, există un astfel de lucru ca un șablon, care permite programatorului de a defini funcțiile polimorfe cum ar fi sortarerapidă. In standardul C ++ biblioteca STL include o funcție și o varietate de alte funcții polimorfe. Dar, template-uri C ++ ca functii generice Ada genera de fapt, o mulțime de funcții supraîncărcate, care, de altfel, compilatorul trebuie să compilează de fiecare dată, ceea ce afectează în mod negativ timpul compilării și dimensiunea codului. Și în limbile funcționale, funcția polimorfă quickSort este o singură funcție.

În unele limbi, cum ar fi de Ada, dactilografiere puternică forțează programatorul să descrie în mod explicit tipul tuturor valorilor și funcțiilor. Pentru a evita acest lucru, într-un limbaje funcționale puternic-tastate a construit un mecanism special care permite compilatorul pentru a determina tipurile de constante, expresii și funcții de context. Acest mecanism se numește mecanismul de inferență de tip. Există mai multe astfel de mecanisme, dar cele mai multe dintre ele sunt variante ale modelelor dactilografiere Hindley-Milner, dezvoltat la începutul anilor '80 ai secolului XX. Astfel, în majoritatea cazurilor, nu puteți specifica tipurile de funcții.







Articole similare

Trimiteți-le prietenilor: