Функційне програмування: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Litwisha (обговорення | внесок)
Litwisha (обговорення | внесок)
Рядок 68:
 
=== Підхід до обчислення аргументів ===
Функціональні мови можна класифікувати по тому, як обробляються аргументи функції в процесі її обчислення. Технічно відмінність полягає в денотаціоннойденотаціонній семантиці виразу.
Наприклад, при строгому підході до обчислення виразу
<source lang="python">
print (len ([2 +1, 3 * 2, 1/0, 5-4]))
</Source>
на виході буде помилка, так як в третьому елементі списку присутній поділ на нуль. При нестрогому підході значенням виразу буде 4, оскільки для обчислення довжини списку значення його елементів, строго кажучи, не важливі і можуть взагалі не обчислюватися. При строгому (апплікатівномаплікативному) порядокпорядку обчислення заздалегідь підраховуються значення всіх аргументів перед обчисленням самої функції. При нестрогому підході (нормальний порядок обчислення) значення аргументів не обчислюються до тих пір, поки їх значення не знадобитьсязнадобляться при обчисленні функції<ref name="lenivie">'' Н.&nbsp;А.&nbsp;Роганова'' Функціональне програмування: Навчальний посібник для студентів вищих навчальних закладів&nbsp;— М.: ГІНФО, 2002.&nbsp;— 260 с. Стор. 14 п. 3.1. Ледачі і енергійні обчислення </ref>.
 
Як правило, нестрогий підхід реалізується у вигляді редукції графа. НестрогоеНестроге обчислення використовується за умовчаннямзамовчуванням в декількох чисто функціональних мовах, у тому числі [[Міранда (мова програмування) | Miranda]], [[Clean]] і [[Haskell]].{{fact}}
 
=== ФП в нефункціональних мовах ===