Это интересно. Пусть у нас есть
Racket, где мы определим метод
eval-string и запросим библиотеку для работы со множествами
1
2
3
4
| (define ns (make-base-namespace))
(define (eval-string str)
(eval (call-with-input-string str read) ns))
(eval-string "(require racket/set)")
|
По-eval'им немного, а дальше столкнемся со странным
1
2
| > (set? (eval-string "(set 1 2)"))
#f
|
Надо заметить, что
1
2
| > (list? (eval-string "(list 1 2)"))
#t
|
Это конечно связано с тем, что list (в отличие от set) входит в racket/base; make-
base-namespace как бы намекает нам.
Документация подсказывает правильное решение
1
2
3
4
| (define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))
(define (eval-string str)
(eval (call-with-input-string str read) ns))
|
И все же, какой тип имеет (eval-string "(set 1 2)")?
Комментариев нет:
Отправить комментарий