mirror of
https://github.com/janet-lang/janet
synced 2024-12-26 08:20:27 +00:00
Merge pull request #1283 from primo-ppcg/mean-partition
Update `partition`, `mean`
This commit is contained in:
commit
e69954af2f
@ -643,7 +643,12 @@
|
|||||||
(defn mean
|
(defn mean
|
||||||
"Returns the mean of xs. If empty, returns NaN."
|
"Returns the mean of xs. If empty, returns NaN."
|
||||||
[xs]
|
[xs]
|
||||||
(/ (sum xs) (length xs)))
|
(if (lengthable? xs)
|
||||||
|
(/ (sum xs) (length xs))
|
||||||
|
(do
|
||||||
|
(var [accum total] [0 0])
|
||||||
|
(each x xs (+= accum x) (++ total))
|
||||||
|
(/ accum total))))
|
||||||
|
|
||||||
(defn product
|
(defn product
|
||||||
"Returns the product of xs. If xs is empty, returns 1."
|
"Returns the product of xs. If xs is empty, returns 1."
|
||||||
@ -1730,20 +1735,28 @@
|
|||||||
ret))
|
ret))
|
||||||
@[]))
|
@[]))
|
||||||
|
|
||||||
|
(defn- partition-slice
|
||||||
|
[f n ind]
|
||||||
|
(var [start end] [0 n])
|
||||||
|
(def len (length ind))
|
||||||
|
(def parts (div len n))
|
||||||
|
(def ret (array/new-filled parts))
|
||||||
|
(forv k 0 parts
|
||||||
|
(put ret k (f ind start end))
|
||||||
|
(set start end)
|
||||||
|
(+= end n))
|
||||||
|
(if (< start len)
|
||||||
|
(array/push ret (f ind start)))
|
||||||
|
ret)
|
||||||
|
|
||||||
(defn partition
|
(defn partition
|
||||||
``Partition an indexed data structure `ind` into tuples
|
``Partition an indexed data structure `ind` into tuples
|
||||||
of size `n`. Returns a new array.``
|
of size `n`. Returns a new array.``
|
||||||
[n ind]
|
[n ind]
|
||||||
(var i 0) (var nextn n)
|
(cond
|
||||||
(def len (length ind))
|
(indexed? ind) (partition-slice tuple/slice n ind)
|
||||||
(def ret (array/new (math/ceil (/ len n))))
|
(bytes? ind) (partition-slice string/slice n ind)
|
||||||
(def slicer (if (bytes? ind) string/slice tuple/slice))
|
(partition-slice tuple/slice n (values ind))))
|
||||||
(while (<= nextn len)
|
|
||||||
(array/push ret (slicer ind i nextn))
|
|
||||||
(set i nextn)
|
|
||||||
(+= nextn n))
|
|
||||||
(if (not= i len) (array/push ret (slicer ind i)))
|
|
||||||
ret)
|
|
||||||
|
|
||||||
###
|
###
|
||||||
###
|
###
|
||||||
|
@ -349,6 +349,13 @@
|
|||||||
"sort 5")
|
"sort 5")
|
||||||
(assert (<= ;(sort (map (fn [x] (math/random)) (range 1000)))) "sort 6")
|
(assert (<= ;(sort (map (fn [x] (math/random)) (range 1000)))) "sort 6")
|
||||||
|
|
||||||
|
# #1283
|
||||||
|
(assert (deep=
|
||||||
|
(partition 2 (generate [ i :in [:a :b :c :d :e]] i))
|
||||||
|
'@[(:a :b) (:c :d) (:e)]))
|
||||||
|
(assert (= (mean (generate [i :in [2 3 5 7 11]] i))
|
||||||
|
5.6))
|
||||||
|
|
||||||
# And and or
|
# And and or
|
||||||
# c16a9d846
|
# c16a9d846
|
||||||
(assert (= (and true true) true) "and true true")
|
(assert (= (and true true) true) "and true true")
|
||||||
|
Loading…
Reference in New Issue
Block a user