История изменений
Исправление alienclaster, (текущая версия) :
А в динамике функция не знает, кто её вызывает.
В Racket пошли на компромисс: контракты проверяются только на границе модуля.
Ну, я о таком «компромиссе» и писал, когда говорил что проверяем на входе и на выходе. А все что внутри считаем трастовым.
То есть если add-item вызывается внутри модуля (обработки сортированных массивов), то контракт не проверяется.
Это логично, хотя и да, компромиссное решение.
Но если он экспортирован и вызывается так, как я описал, контракт применяется на каждый вызов.
Мне интуитивно кажется, что могут быть лучше стратегии проверки, ведь мы один раз уже проверили эту последовательность, а дальше для ее модификации, так же как и в статике, используем трастовую функцию добавления.
У add-item нет возможности узнать, что данные пришли из другого вызова add-item.
Опять же, чисто мое предположение - что это всего лишь особенность реализации (рантайма).
Исходная версия alienclaster, :
А в динамике функция не знает, кто её вызывает.
В Racket пошли на компромисс: контракты проверяются только на границе модуля.
Ну, я о таком «компромиссе» и писал, когда говорил что проверяем на входе и на выходе. А все что внутри считаем трастовым.
То есть если add-item вызывается внутри модуля (обработки сортированных массивов), то контракт не проверяется.
Это логично, если
Но если он экспортирован и вызывается так, как я описал, контракт применяется на каждый вызов.
Мне интуитивно кажется, что могут быть лучше стратегии проверки, ведь мы один раз уже проверили эту последовательность, а дальше для ее модификации, так же как и в статике, используем трастовую функцию добавления.
У add-item нет возможности узнать, что данные пришли из другого вызова add-item.
Опять же, чисто мое предположение - что это всего лишь особенность реализации (рантайма).