Как включить имена полей при печати структуры ракетки

#struct #racket

#структура #racket

Вопрос:

Предположим, у меня есть этот код Racket:

 (struct pos (x y))
(displayln (pos 5 6))
 

Это отображается #<pos> . Есть ли способ заставить его отображать имена и значения полей?

С помощью этой #:transparent опции отображаются значения:

 (struct pos (x y) #:transparent)
(displayln (pos 5 6))
 

Это отображается #(struct:pos 5 6) , но я также хочу отобразить имена полей ( x и y ). Есть ли способ отобразить как имена, так и значения полей? Например: #(struct:pos #:x 5 #:y 6) .

Я ищу что-то похожее на то, как отображаются структуры Common Lisp. Пример Common Lisp:

 (defstruct pos x y)
(format t "~A~%" (make-pos :x 5 :y 6))
 

Это печатает #S(POS :X 5 :Y 6) .

Ответ №1:

Если вы не хотите использовать сторонние библиотеки, взгляните на самый последний пример make-constructor-style-printer .

Если вы не возражаете против использования сторонних библиотек, вы можете просто использовать Rebellion’s record .