mirror of
https://github.com/janet-lang/janet
synced 2024-12-25 07:50:27 +00:00
Merge branch 'master' of https://github.com/Gavlooth/dst into gavlooth
This commit is contained in:
commit
8d302d9b1f
@ -62,7 +62,7 @@ body once, and then memoizes the result."
|
|||||||
(range2 0 end))
|
(range2 0 end))
|
||||||
|
|
||||||
(defn map
|
(defn map
|
||||||
"Return a sequence that is the result of apply f to each value in s."
|
"Return a sequence that is the result of applying f to each value in s."
|
||||||
[f s]
|
[f s]
|
||||||
(delay
|
(delay
|
||||||
(def x (s))
|
(def x (s))
|
||||||
@ -105,3 +105,41 @@ body once, and then memoizes the result."
|
|||||||
(when x
|
(when x
|
||||||
(def thehead (get HEAD x))
|
(def thehead (get HEAD x))
|
||||||
(if thehead (tuple thehead (take-while pred (get TAIL x)))))))
|
(if thehead (tuple thehead (take-while pred (get TAIL x)))))))
|
||||||
|
|
||||||
|
#Iterators is a conscept that looks a lot like lazy seq
|
||||||
|
#The following functions turn iterators to lazy seq and vice versa
|
||||||
|
|
||||||
|
(defn- iter-self
|
||||||
|
[next]
|
||||||
|
(delay (tuple (next) (iter-self next))))
|
||||||
|
|
||||||
|
(defn iter2lazy
|
||||||
|
"Create a lazy sequence froma an iterator"
|
||||||
|
[iter]
|
||||||
|
(def {:more more :next next} iter)
|
||||||
|
(iter-self next))
|
||||||
|
|
||||||
|
(defn lazy2iter
|
||||||
|
"turn a lazy-seq to an iterator"
|
||||||
|
[lazy-seq]
|
||||||
|
(var result (head lazy-seq) )
|
||||||
|
(var rest (tail lazy-seq))
|
||||||
|
{:more (fn [] result)
|
||||||
|
:next (fn [] (def next result)
|
||||||
|
(when result
|
||||||
|
(:= result (head rest))
|
||||||
|
(:= rest (tail rest)))
|
||||||
|
next)})
|
||||||
|
|
||||||
|
|
||||||
|
#Now we can use the nonfuctional filter from boot.dst
|
||||||
|
#to write a filter version that returns a lazy sequence
|
||||||
|
#Be carefull when creating lazy sequences from mutable
|
||||||
|
#data structures as their values are references to this
|
||||||
|
#data structures. Same is true for iterators
|
||||||
|
|
||||||
|
(defn filter2 [pred coll]
|
||||||
|
(tail (iter2lazy (filter pred coll))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user