часткові функції

Специфікація всякого реалістичного прикладу, навіть такого простого як стеки, неминуче стикається з проблемами не всюди певних операцій: деякі операції застосовні не до всіх можливих елементів вихідних множин. Наприклад, це має місце для функцій remove і item: не можна видалити елемент з пустого стека, і у порожнього стека немає верхнього елементу.

Вирішення цієї проблеми, використане в наведеній вище специфікації, полягає в тому, щоб визначити ці функції як часткові. Функція з початкової множини X в результуюче безліч Y є частковою. якщо вона визначена не для всіх елементів X. Функція, яка не є частковою, називається повною. Простим прикладом часткової функції в звичайному математики є функція звернення дійсних чисел inv, значення якої на дійсне число x одно

Оскільки inv не визначена при x = 0, ми можемо визначити її як часткову функцію на множині R всіх дійсних чисел:

Щоб вказати, що функція часткова, використовується перекреслена стрілка, а звичайна стрілка буде означати, що функція свідомо повна.

Областю (визначення) часткової функції типу є підмножина тих елементів X, для яких ця функція має деяке значення. У нашому прикладі областю функції inv є R -, тобто безліч дійсних чисел, відмінних від 0.

У деяких випадках функцію put теж бажано описувати як часткову, наприклад, це потрібно в таких реалізаціях як МАССІВ_ВВЕРХ і МАССІВ_ВНІЗ, які підтримують виконання лише кінцевого числа поспіль операцій put для кожного заданого стека. Це насправді корисна вправа - пристосувати специфікацію STACK до того, щоб вона описувала обмежені стеки кінцевого обсягу, оскільки в наведеному вище вигляді вона не містить ніяких обмежень на розміри стеків.