2026-01-03 土  

*▽ 先日のコードのリファクタリング : lisp :
先日はほとんどAIにやってもらったようなもんだったので、
それのリファクタリング。
最初はAIと共同でここをああしてこうしてと指示してたけど、
途中からAIが馬鹿になってしまって、何度やっても
話している事とは全然違う前のバージョンを上げてきて進まなくなったから
自分で修正かけて出したら、これをartifactしていいか?
って事でOK出したらちょこっと自分のバージョンを更に
手直しして最終バージョンにしたっぽい。
JSCLのREPLから試せるようにとUIOP依存の関数部分を
自作してそれに合わせた感じで作り直した。
でも肝心のREPLの方はset-macro-charactor未対応だった。残念。
src lisp
    (defun sep (seq sep)
    "文字列を區切り文字にて二分する關數"
    (let ((sep-pos (search sep seq)))
      (list (subseq seq 0 sep-pos)
            (subseq seq (+ sep-pos (length sep)))))) ; =>SEP 

  (defun iota-braces (stream char)
    "讀み込み時マクロにて數値範圍を展開する關數(ステップ數對應)"
    (declare (ignore char))
    (let* ((start-end-step-str (with-output-to-string (s)
                                 (loop for c = (read-char stream)
                                       until (char= c #\})
                                       do (write-char c s))))
           (all-str (sep start-end-step-str "-"))
           (start (parse-integer (first all-str)))
           (rest (second all-str))
           (end-step-str (if (search ":" rest)
                             (sep rest ":")
                             (list rest nil)))
           (end (parse-integer (first end-step-str)))
           (step-str (second end-step-str))
           (step (if step-str
                     (parse-integer step-str)
                     1)))
      (if (< start end)
          (loop for i from start to end by step collect i)
          (loop for i from start downto end by step collect i)))) ; =>IOTA-BRACES 

  (set-macro-character #\{ #'iota-braces)       ; =>T 
  (set-macro-character #\} (get-macro-character #\) nil)) ; =>T 
src