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

david....@gmail.com 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 racket-users+unsubscr...@googlegroups.com.
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