;; https://arxiv.org/html/0901.4016
($define! ip
($λ (a b c d)
(+ d (* #x100 (+ c (* #x100 (+ b (* #x100 a))))))))
($define! proquint
($let* ((fn ($λ (chars)
($let ((modulus (string-length chars)))
($λ (k)
($λ (in out)
($let (((quo idx) (truncate/ in modulus)))
(k quo (cons (string-ref chars idx) out))))))))
(consonant (fn "bdfghjklmnprstvz"))
(vowel (fn "aiou")))
($λ (number)
($let loop ((number number)
(out ()))
($let* ((do-rest
($λ (in out)
($if (zero? in)
(list->string out)
(loop in (cons #\- out)))))
(do-word
(consonant (vowel (consonant (vowel (consonant do-rest)))))))
(do-word number out))))))
(list (proquint (ip 127 0 0 1))
(proquint (ip 63 84 220 193))
(proquint (ip 63 118 7 35)))