さくらんぼのlambda日記

lambdaちっくなことからゲーム開発までいろいろ書きます。

Lispで文字を寄せる

文字を寄せる方法を簡単にですが実装してみました。

(defun make-string-lefted (count target)
(let((space-num (- count (length target))))
    (concatenate 'string target 
 (make-string 
  space-num 
  :initial-element #\Space))))

(defun make-string-righted (count target)
(let((space-num (- count (length target))))
    (concatenate 'string 
 (make-string 
  space-num 
  :initial-element #\Space)
 target )))

(defun make-string-centered (count target)
  (if (> count (length target))
      (let*     ((space-num (truncate (- count (length target)) 2))
                 (left-space-string (make-string
                                     space-num
                                     :initial-element #\Space))
                 (right-space-string (make-string
                                      (- count (+ (length target) space-num ))
                                      :initial-element #\Space)))
        (concatenate 'string
                     left-space-string
                     target
                     right-space-string ))
      target ))

それでは実行してみます

(make-string-centered 10 "Lisp")
"   Lisp   "
(make-string-lefted 10 "Lisp")
"Lisp      "   
(make-string-righted 10 "Lisp")
"      Lisp" 

こんな感じ。
うまく動いているような気がします。