Phase 6: slurp, spit, read-line, range 3-arg, repeat/cycle/iterate, interleave

Phase 6 Clojure Core Library now complete (except meta):
- T6.3: slurp (alias for file/read)
- T6.4: spit (alias for file/write)
- T6.5: read-line (stdin input)
- T6.6: range with 3 args (start, end, step)
- T6.7: repeat, cycle, iterate (eager implementations)
- T6.9: interleave
- Updated TASKS.md and ROADMAP.md
This commit is contained in:
2026-05-08 19:24:06 +03:00
parent 6dfc2a9308
commit 19ef69bf5b
4 changed files with 113 additions and 15 deletions
+9 -9
View File
@@ -43,15 +43,15 @@
| ID | Task | Status | Complexity | Files | Acceptance Criteria |
|---|---|---|---|---|---|
| T6.1 | `str` — string concatenation | | 🟢 | `lib/cljnim_runtime.nim`, `src/emitter.nim` | `(str "a" 1 true)``"a1true"`. Test in `tests/test_emitter.nim`. |
| T6.2 | `pr-str` — readable representation | | 🟢 | `lib/cljnim_runtime.nim` | `(pr-str [1 2 3])``"[1 2 3]"`. Escapes strings properly. |
| T6.3 | `slurp` — read file to string | | 🟢 | `lib/cljnim_runtime.nim`, `src/emitter.nim` | `(slurp "file.txt")` returns content. Already have `file/read` — just alias/wrap. |
| T6.4 | `spit` — write string to file | | 🟢 | `lib/cljnim_runtime.nim`, `src/emitter.nim` | `(spit "file.txt" "content")` writes file. |
| T6.5 | `read-line` — read from stdin | | 🟢 | `lib/cljnim_runtime.nim` | `(read-line)` reads one line from stdin. |
| T6.6 | `range` — lazy number sequence | | 🟡 | `lib/cljnim_runtime.nim` | `(range 10)`, `(range 1 10)`, `(range 1 10 2)`. Returns lazy seq. |
| T6.7 | `repeat`, `cycle`, `iterate` | | 🟡 | `lib/cljnim_runtime.nim` | Infinite lazy sequences. |
| T6.8 | `take`, `drop` — seq slicing | | 🟢 | `lib/cljnim_runtime.nim` | `(take 5 (range 100))`, `(drop 5 [1 2 3 4 5])`. |
| T6.9 | `partition`, `interleave` | | 🟢 | `lib/cljnim_runtime.nim` | `(partition 2 [1 2 3 4])`, `(interleave [1 2] [3 4])`. |
| T6.1 | `str` — string concatenation | | 🟢 | `lib/cljnim_runtime.nim`, `src/emitter.nim` | `(str "a" 1 true)``"a1true"`. `cljStrConcat` in runtime. |
| T6.2 | `pr-str` — readable representation | | 🟢 | `lib/cljnim_runtime.nim` | `(pr-str [1 2 3])``"[1 2 3]"`. `cljPrStrConcat` in runtime. |
| T6.3 | `slurp` — read file to string | | 🟢 | `lib/cljnim_runtime.nim`, `src/emitter.nim` | `(slurp "file.txt")` returns content. Maps to `cljFileRead`. |
| T6.4 | `spit` — write string to file | | 🟢 | `lib/cljnim_runtime.nim`, `src/emitter.nim` | `(spit "file.txt" "content")` writes file. Maps to `cljFileWrite`. |
| T6.5 | `read-line` — read from stdin | | 🟢 | `lib/cljnim_runtime.nim` | `(read-line)` reads one line from stdin. |
| T6.6 | `range` — lazy number sequence | | 🟡 | `lib/cljnim_runtime.nim` | `(range 10)`, `(range 1 10)`, `(range 1 10 2)`. Eager with 3-arg. |
| T6.7 | `repeat`, `cycle`, `iterate` | | 🟡 | `lib/cljnim_runtime.nim` | `(repeat n x)`, `(cycle n coll)`, `(iterate n f x)`. Eager. |
| T6.8 | `take`, `drop` — seq slicing | | 🟢 | `lib/cljnim_runtime.nim` | `(take 5 (range 100))`, `(drop 5 [1 2 3 4 5])`. |
| T6.9 | `partition`, `interleave` | | 🟢 | `lib/cljnim_runtime.nim` | `(partition 2 [1 2 3 4])`, `(interleave [1 2] [3 4])`. |
| T6.10 | `meta`, `with-meta`, `vary-meta` | ⬜ | 🟡 | `lib/cljnim_runtime.nim`, `src/types.nim` | Metadata support on vars, functions, collections. |
| T6.11 | `type`, `instance?` | ⬜ | 🟢 | `lib/cljnim_runtime.nim` | `(type 42)``:int`. `(instance? :int 42)` → true. |