Step 4: evaluator eager assumptions — lazy rest + lazy mapcat
Fix & rest destructuring (evaluator.janet): when the original value is a lazy-seq, derive & rest by walking ls-rest vi steps instead of slicing the eagerly-realized array from d-realize. Rewrite core-mapcat as a lazy state machine (core.janet): step through input colls one element at a time, call f on each tuple, then yield from f's result collection. No apply-forcing — all input colls are walked lazily via lazy-from + seq-done?. Add mapcat to core-renames (compiler.janet) and remove from Clojure overlay (10-seq.clj) — compile mode now emits direct calls to the lazy core-mapcat, fixing the pre-existing protocol-on-record compile error. Tests: re-enabled mapcat infinite harness case, added 2 & rest laziness cases. 21/21 lazy-infinite, 229x3 conformance, 32/32 specs.
This commit is contained in:
parent
ff8ffb8cd6
commit
42da5cef9a
5 changed files with 60 additions and 26 deletions
|
|
@ -52,8 +52,9 @@
|
|||
["take 3 partition-all 2 range" "(quote ((0 1) (2 3) (4 5)))" "(take 3 (partition-all 2 (range)))"]
|
||||
["take 3 map-indexed vector range" "(quote ([0 0] [1 1] [2 2]))" "(take 3 (map-indexed vector (range)))"]
|
||||
["take 3 distinct cycle" "(quote (1 2 3))" "(take 3 (distinct (cycle [1 2 1 3 1])))"]
|
||||
# mapcat on infinite inputs hangs (apply forces lazy result, needs Step 4).
|
||||
# ["take 6 mapcat dup range" "(quote (0 0 1 1 2 2))" "(take 6 (mapcat (fn [x] [x x]) (range)))"]
|
||||
["take 6 mapcat dup range" "(quote (0 0 1 1 2 2))" "(take 6 (mapcat (fn [x] [x x]) (range)))"]
|
||||
["first rest lazy" "1" "(let [[a & r] (range)] (first r))"]
|
||||
["take 3 rest lazy" "(quote (1 2 3))" "(let [[a & r] (range)] (take 3 r))"]
|
||||
["take 3 take-nth 2 range" "(quote (0 2 4))" "(take 3 (take-nth 2 (range)))"]
|
||||
["take 3 interpose :x range" "(quote (0 :x 1))" "(take 3 (interpose :x (range)))"]
|
||||
["take 3 map vector range iterate" "(quote ([0 100] [1 101] [2 102]))" "(take 3 (map vector (range) (iterate inc 100)))"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue