mirror of
https://github.com/janet-lang/janet
synced 2025-12-11 19:18:07 +00:00
Allow matching tuples and arrays exactly via a dollar suffix.
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## Unreleased - ???
|
||||||
|
- Add `thaw-keep-keys` as a variant of thaw
|
||||||
|
- The `repl` function now respects the `*repl-prompt*` dynamic binding.
|
||||||
|
|
||||||
## 1.40.1 - 2025-11-16
|
## 1.40.1 - 2025-11-16
|
||||||
- Fix `JANET_REDUCED_OS` build regression caused by `os/posix-chroot`.
|
- Fix `JANET_REDUCED_OS` build regression caused by `os/posix-chroot`.
|
||||||
- Code formatting
|
- Code formatting
|
||||||
|
|||||||
@@ -1480,52 +1480,12 @@
|
|||||||
``Do a post-order traversal of a data structure and call `(f x)`
|
``Do a post-order traversal of a data structure and call `(f x)`
|
||||||
on every visitation.``
|
on every visitation.``
|
||||||
[f form]
|
[f form]
|
||||||
(f (walk (fn :visit [x] (postwalk f x)) form)))
|
(f (walk (fn [x] (postwalk f x)) form)))
|
||||||
|
|
||||||
(defn prewalk
|
(defn prewalk
|
||||||
"Similar to `postwalk`, but do pre-order traversal."
|
"Similar to `postwalk`, but do pre-order traversal."
|
||||||
[f form]
|
[f form]
|
||||||
(walk (fn :visit [x] (prewalk f x)) (f form)))
|
(walk (fn [x] (prewalk f x)) (f form)))
|
||||||
|
|
||||||
(defn- walk-dict-pairs [f form]
|
|
||||||
(def ret @{})
|
|
||||||
(eachp p1 form
|
|
||||||
(def p2 (f p1))
|
|
||||||
(when p2
|
|
||||||
(def [k v] p2)
|
|
||||||
(put ret k v)))
|
|
||||||
ret)
|
|
||||||
|
|
||||||
(defn walk2
|
|
||||||
``Iterate over the values in ast and apply `f`
|
|
||||||
to them. Collect the results in a data structure. Differs from `walk` in 2 ways:
|
|
||||||
|
|
||||||
* Will iterate fibers and gather results into an array.
|
|
||||||
* Tables and structs are traversed by visiting each key-value as a tuple instead
|
|
||||||
of iterating them in an interleaved fashion.
|
|
||||||
|
|
||||||
If ast is not a
|
|
||||||
table, struct, array, tuple, or fiber,
|
|
||||||
returns form.``
|
|
||||||
[f form]
|
|
||||||
(case (type form)
|
|
||||||
:table (walk-dict-pairs f form)
|
|
||||||
:struct (table/to-struct (walk-dict-pairs f form))
|
|
||||||
:array (walk-ind f form)
|
|
||||||
:tuple (keep-syntax! form (walk-ind f form))
|
|
||||||
:fiber (walk-ind f form)
|
|
||||||
form))
|
|
||||||
|
|
||||||
(defn postwalk2
|
|
||||||
``Do a post-order traversal of a data structure and call `(f x)`
|
|
||||||
on every visitation.``
|
|
||||||
[f form]
|
|
||||||
(f (walk2 (fn :visit [x] (postwalk2 f x)) form)))
|
|
||||||
|
|
||||||
(defn prewalk2
|
|
||||||
"Similar to `postwalk`, but do pre-order traversal."
|
|
||||||
[f form]
|
|
||||||
(walk2 (fn :visit [x] (prewalk2 f x)) (f form)))
|
|
||||||
|
|
||||||
(defmacro as->
|
(defmacro as->
|
||||||
``Thread forms together, replacing `as` in `forms` with the value
|
``Thread forms together, replacing `as` in `forms` with the value
|
||||||
|
|||||||
@@ -185,5 +185,11 @@
|
|||||||
(assert-no-error "iterate over coro 2" (keys (generate [x :range [0 10]] x)))
|
(assert-no-error "iterate over coro 2" (keys (generate [x :range [0 10]] x)))
|
||||||
(assert-no-error "iterate over coro 3" (pairs (generate [x :range [0 10]] x)))
|
(assert-no-error "iterate over coro 3" (pairs (generate [x :range [0 10]] x)))
|
||||||
|
|
||||||
|
# thaw
|
||||||
|
(def ds1 [1 2 3 {:a 2} {:b 3} 4 5 6])
|
||||||
|
(def ds2 [1 2 3 {:a 2 {:c :d} {:e :f}} {:b 3} 4 5 6])
|
||||||
|
(assert (deep= (thaw ds1) (thaw-keep-keys ds1)) "thaw vs. thaw-keep-keys 1")
|
||||||
|
(assert (deep-not= (thaw ds2) (thaw-keep-keys ds2)) "thaw vs. thaw-keep-keys 2")
|
||||||
|
|
||||||
(end-suite)
|
(end-suite)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user