; 1文字ごとにコード属性 c に変換する ; i 番目の文字に対して (c - i - 1) % 26 ; を行い文字に直す (defun main () (let* ( (s ; map result-type function &rest sequence+ ; 各 sequence に function を適用し ; result-typeにして返す (map ; vector (1次元の配列) として返すよう指示 'vector ; char-code 関数は文字のコード属性を返す ; ascii 文字コードでは A = 65, a = 97 (lambda (c) (- (char-code c) 65)) ; 1行文字列入力 (read-line)))) (loop ; length は sequence の要素数を返す for i below (length s) ; 変数 c を定義し (aref s i) に更新する ; aref 関数は配列にアクセスする関数 for c = (aref s i) do ; write-char で文字を出力ストリームに出力する (write-char ; code-char code ; コード属性がcodeの文字を返す (code-char ; 1+ i は (+ 1 i) (+ 65 (mod (- c (1+ i)) 26)))))) ; 出力ストリームに改行を出力する (terpri)) (main)