▼ 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))))))
(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))))
(set-macro-character #\{ #'iota-braces) (set-macro-character #\} (get-macro-character #\) nil)) src