And an SRFI-105 Curly infix version:
#lang reader SRFI-105 ; SRFI-105 Curly-infix-expressions
(module repl racket
(provide (all-defined-out))
(require qi)
{("Qrsberfgngvba"
"Gur L Pbzovangbe"
"Gnvy Pnyy Bcgvzvmngvba"
"N YVFC Znpeb"
"Ubzbgbl Glcr Gurbel"
"Glcr Vasrerapr"
"Pbagvahngvba"
"Ynzoqn Pnyphyhf"
"Zbanq"
"Pheelvat"
"F-rkerffvba"
"ERCY (Ernq-Riny-Cevag Ybbc)"
"Fvqr Rssrpg"
"Cher Shavgvba"
"Tneontr Pbyyrpgvba"
"Dhvar"
"Nofgenpg Flagnk Gerr (NFG)"
"Sbezny Irevsvpngvba"
"N Flavgurfmre Zbqhyr"
"Sybj-Onfrq Cebtenzzvat"
"Rznpf"
"N pbagvahngvba-cnffvat fglyr genafsbez")
~> list ~> (tee _ {length ~> random}) ~> list-ref ~> string-downcase ~> string->list
~> (map (flow (~> (if ((char>=? _ #\a) and (char<=? _ #\z))
(~> char->integer (- (char->integer #\a)) (- 13) (modulo 26) (+ (char->integer #\a)) integer->char)
_ )))
_)
~> list->string}
)
The fun thing is that the curly infix parser of SRFI-105/Scheme+ parse it back to the original prefix version
:
Welcome to DrRacket, version 8.18.0.13-2025-08-26-0bb5c26e85 [cs].
Language: reader SRFI-105, with debugging; memory limit: 8192 MB.
SRFI 105 Curly Infix v12.8 for Scheme+
care of quote flag set to:#t
strict SRFI-105 flag set to:#f
use only syntax transformers flag set to:#f
SRFI-105 Curly Infix parser for Racket Scheme and R6RS by Damien MATTEI
(based on code from David A. Wheeler and Alan Manuel K. Gloria.)
Possibly skipping some header's lines containing space,tabs,new line,etc or comments.
SRFI-105 Curly Infix reader : number of skipped lines (comments, spaces, directives,...) at header's beginning : 3
Parsed curly infix code result =
(module repl racket
(provide (all-defined-out))
(require qi)
(~>
("Qrsberfgngvba"
"Gur L Pbzovangbe"
"Gnvy Pnyy Bcgvzvmngvba"
"N YVFC Znpeb"
"Ubzbgbl Glcr Gurbel"
"Glcr Vasrerapr"
"Pbagvahngvba"
"Ynzoqn Pnyphyhf"
"Zbanq"
"Pheelvat"
"F-rkerffvba"
"ERCY (Ernq-Riny-Cevag Ybbc)"
"Fvqr Rssrpg"
"Cher Shavgvba"
"Tneontr Pbyyrpgvba"
"Dhvar"
"Nofgenpg Flagnk Gerr (NFG)"
"Sbezny Irevsvpngvba"
"N Flavgurfmre Zbqhyr"
"Sybj-Onfrq Cebtenzzvat"
"Rznpf"
"N pbagvahngvba-cnffvat fglyr genafsbez")
list
(tee _ (~> length random))
list-ref
string-downcase
string->list
(map
(flow
(~>
(if (and (char>=? _ #\a) (char<=? _ #\z))
(~>
char->integer
(- (char->integer #\a))
(- 13)
(modulo 26)
(+ (char->integer #\a))
integer->char)
_)))
_)
list->string))
"a lisp macro"
>
i could go deeper in the infix expression but it will always return to the original prefix code.
A good test for the parser indeed.
Is it better in infix? i do not know.I just wanted to test the parser with Qi ~> operator.