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.

Reply via email to