@(next :args) @(do (defun vig-op (plus-or-minus) (op + #\A [mod [plus-or-minus (- @1 #\A) (- @2 #\A)] 26])) (defun vig (msg key encrypt) (mapcar (vig-op [if encrypt + -]) msg (repeat key)))) @(coll)@{key /[A-Za-z]/}@(end) @(coll)@{msg /[A-Za-z]/}@(end) @(cat key "") @(filter :upcase key) @(cat msg "") @(filter :upcase msg) @(bind encoded @(vig msg key t)) @(bind decoded @(vig msg key nil)) @(bind check @(vig encoded key nil)) @(output) text: @msg key: @key enc: @encoded dec: @decoded check: @check @(end)