TXR Lisp program:
(defvarl ch-name (relate (rlist 0..32 127)
'#"NUL SOH STX ETX EOT ENQ ACK BEL BS \
HT LF VT FF CR SO SI DLE DC1 DC2 DC3 \
DC4 NAK SYN ETB CAN EM SUB ESC FS GS \
RS US SPC DEL"
nil))
(defun print-row (ch)
(format t "~,3d ~,02x ~,07b ~,03o ~a\n"
ch ch ch ch (or [ch-name ch] (chr-num ch))))
(match-case *args*
(@(require @(or @(with (`0x@{dig #/[\dA-Fa-f]+/}`) base 16)
@(with (`0b@{dig #/[01]+/}`) base 2)
@(with (`0o@{dig #/[0-7]+/}`) base 8)
@(with (`@{dig #/\d+/}`) base 10))
(let ((val (toint dig base)))
(if (<= 0 val 127)
(print-row val)))))
(() [mapdo print-row 0..128])
(@else (put-line "error in argument") (exit nil)))
No need to use a word list literal in definition of ch-name; symbols will do: