Как уже отмечалось, объекты Mathematica имеют средства установки и снятия защиты от модификации. Для этого используются следующие функции-директивы:
Приведем наглядный пример модификации встроенной функции логарифма:
Log[7]=2
Set::write : Tag Log in Log[7] is Protected.
2
Итак, здесь предпринята попытка приписать логарифму числа 7 вовсе не свойственное ему значение 2. В ответ система выдала сообщение, что символ Log имеет атрибут Protected, то есть защищен от модификации. С помощью директивы Unprotect снимем защиту:
Unprotect[Log]
{Log}
Теперь выражение Log [ 7 ] можно модифицировать:
Log[7] =2
2
и использовать его уже в новом значении:
Log[7]=2
2
Log[7]+Log[3]
2 + Log[3]
Для отмены произведенной модификации и защиты символа Log от изменений выполните следующие действия:
Log[7]=.
Protect[Log]
{Log}
Теперь можно проверить, что присваивание Log [7] =2 не действует и функция Log работает как положено, возвращая значение In (7) =1. 94591:
Log[7]
Log[7]
N[Log[7]]
1.94591
Защита идентификаторов объектов от модификации является мощным средством контроля правильности вычислений. Эту защиту вряд ли стоит снимать подавляющему большинству пользователей. Тем не менее, возможность устранения защиты позволяет переименовать объект, например, при использовании с ним новых алгоритмов вычислений или при задании системе Mathematica каких-то новых свойств, не присущих ей изначально.