Процедура drop

В этом разделе упоминался метод «упрощения» объекта данных путем спуска его по башне насколько возможно вниз. Разработайте процедуру drop , которая делает это для башни, описанной в упражнении 2.83 . Ключ к задаче состоит в том, что надо решить некоторым общим способом, можно ли понизить объект в типе. Например, комплексное число 1.5 + 0i можно опустить до real , комплексное число 1 + 0i до integer , а комплексное число 2 + 3i никуда понизить нельзя. Вот план того, как определить, можно ли понизить объект: для начала определите обобщенную операцию project , которая «сталкивает» объект вниз по башне. Например, проекция комплексного числа будет состоять в отбрасывании его мнимой части. Тогда число можно сдвинуть вниз в том случае, если, спроецировав его, а затем подняв обратно до исходного типа, мы получаем нечто, равное исходному числу. Покажите как реализовать эту идею в деталях, написав процедуру drop , которая опускает объект как можно ниже. Потребуется разработать различные операции проекции и установить project в системе в качестве обобщенной операции. Вам также потребуется обобщенный предикат равенства, подобный описанному в упражнении 2.79 . Наконец, используя drop , перепишите apply-generic из упражнения 2.84 , чтобы она «упрощала» свои результаты.


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

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

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

Вход