Модификация программы дифференцирования

Предположим, что нам захотелось изменить программу дифференцирования так, чтобы она работала с обычной математической нотацией, где + и * не префиксные, а инфиксные операции. Поскольку программа взятия производных определена в терминах абстрактных данных, мы можем изменять представление выражений, с которыми она работает, меняя только предикаты, селекторы и конструкторы, определяющие представление алгебраических выражений, с которыми должен работать дифференциатор.

а. Покажите, как это сделать так, чтобы брать производные от выражений, представленных в инфиксной форме, например (x + (3 * (x + (y + 2)))) . Для упрощения задачи предположите, что + и * всегда принимают по два аргумента, и что в выражении расставлены все скобки.

б. Задача становится существенно сложней, если мы разрешаем стандартную алгебраическую нотацию, например (x + 3 * (x + y + 2)) , которая опускает ненужные скобки и предполагает, что умножение выполняется раньше, чем сложение. Можете ли Вы разработать соответствующие предикаты, селекторы и конструкторы для этой нотации так, чтобы наша программа взятия производных продолжала работать?


Комментарии отсутствуют.

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход