Отпечатайте необработени контролни знаци, като същевременно запазите разделителите на низове в изхода (Racket)

Имам списък в Racket така:

'(some-symbol
  "some\ntext\ngoes in\nhere")

Искам да го отпечатам така, че контролни знаци като \n да се преобразуват в техните действителни стойности, в този случай преместване на ред. Искам обаче също така кавичките на низа (т.е. разделителите) да бъдат запазени в изхода като write или print. Функцията display вече прави първата част от това, което искам, но премахва кавички, които не се екранират като \". напр.:

racket@> (displayln '(some-symbol "some\ntext\ngoes in\nhere")) ;; I want the linefeeds as produced here
(some-symbol some
text
goes in
here)
racket@> (println '(some-symbol "some\ntext\ngoes in\nhere")) ;; But I also want the quotation marks as preserved here
'(some-symbol "some\ntext\ngoes in\nhere")
racket@> 

Има ли някакъв начин да получите този вид изходен ефект в Racket, без да избягвате разделителите на низове като \"? Освен това не искам знака ', който предшества списъка, в изхода.


person GDP2    schedule 07.11.2016    source източник


Отговори (1)


Не е ясно какво точно искате, така че нека ви сложим един сламен човек, за да се чукате:

#lang racket

(require rackunit)

;; find every string in an s-expression, add quotes to it:
(define (add-quotes s)
  (cond [(list? s)
         (map add-quotes s)]
        [(string? s)
         (string-append "\"" s "\"")]
        [else s]))

(check-equal? (add-quotes '((a b "cde") (("g") f)))
              '((a b "\"cde\"") (("\"g\"") f)))

;; display s with quotes around strings:
(define (funny-display s)
  (display (add-quotes s)))

Не е това, което искахте?

person John Clements    schedule 07.11.2016
comment
Това прави това, което искам; Благодаря ти. Съжалявам, ако въпросът ми не е бил много ясен. - person GDP2; 08.11.2016