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

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
м replaced: 978 — 5 → 978-5 за допомогою AWB
Рядок 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}}