2016-11-06 3 views
0

Если я позвоню в Racket/Dr. Ракетка следующий код:Использование модульного тестирования для процедуры в Racket

> add1 

я получаю:

#<procedure:add1> 

Если я использую библиотеку для модульного тестирования под названием стойку корпусе форм, и я стараюсь это:

(require rackunit) 

(check-equal? add1 #<procedure:add1>) 

Тест терпит неудачу с синтаксическая ошибка:

read: bad syntax `#<' 

Wh Это происходит?

ответ

1

Для многих типов данных, what you write can be read back. Но в случае процедур вы не можете, и, таким образом, он выводится как unreadable value.

Процедурное равенство похоже на непрозрачное структурное равенство: оно проверяет идентичность. Если это все, что вам нужно, вы все равно сможете сохранить процедуру где-нибудь и использовать контрольный уровень? (например, список с add1 будет сравниваться с списком с add1). Если вам действительно нужно проверить, что процедура логически одинакова, this is not possible in general.

Смежные вопросы