I am not really aware of a function that does this you could try digging
into the implementation of raise-arguments-error,
usually I roll my own implementation depending on what I really want to
output.
racket/format and its ~a, ~v, etc. have a lot of useful optional keyword
arguments like #:align #:pad-string #:width etc.
This isn't totally what you want, but maybe it has something that is useful
to you.
This or similar code is what I have used sometimes:
#lang racket
(define current-prefix-length (make-parameter 0))
(define (prefixln #:prefix [prefix ""]
#:align [align 'left]
. message)
(displayln (apply ~a (list* (~a prefix #:width (current-prefix-length)
#:align align)
message))))
(define-syntax-rule (with-indent body ...)
(parameterize ([current-prefix-length (+ (current-prefix-length) 2)])
body ...))
(define (example-func1)
(prefixln "start of example func1")
(with-indent
(example-func2))
(prefixln "end of example func1"))
(define (example-func2)
(prefixln "start of example func2")
(prefixln "end of example func2"))
(module+ main
(displayln "Hello checkout these values:")
(define example-values
(hash 'foo 123
'this-is-a-long-key "some value"
'blabla #f
"cake" "is a lie"))
;; ugly oneliner to calculate prefix width
(current-prefix-length (+ 2 (foldl max 0 (map (compose1 string-length ~a)
(hash-keys example-values)))))
(for ([(k v) (in-hash example-values)]) ;; probably sorting or assoc list
would make sense too...
(prefixln #:prefix (~a k ": ") #:align 'right
v))
(current-prefix-length 0)
(displayln "")
(displayln "indentation through multiple nested calls:")
(with-indent
(example-func1)))
If you use a current-prefix-string parameter instead you can create other
interesting things like lines indented with indentation level indicators,
etc.:
indent0
| indent1
| | indent2
| indent1
indent0
But I am getting too off-topic...
Simon
[email protected] schrieb am Mittwoch, 8. September 2021 um 15:41:56
UTC+2:
> raise-arguments-errors produces neatly stacked key/value pairs with
> whitespace arranged such that values line up even when keys are of
> different lengths. Is there an easy way to get that for something that is
> not an error? I've been through both The Printer and the
> raise-arguments-error sections in the Reference and can't find anything.
>
> For example:
>
> (doit "x" 1 "foo" 2 "super" 3)
>
> Returns the string "x 1\nfoo 2\super 3"
>
>
>
>
>
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/racket-users/de65e4a2-7cd3-4347-949f-d8a1f457961en%40googlegroups.com.