hyrule
hyrule copied to clipboard
Bring back `apply` for `argmove`?
My first attempt at implementing partition
looked like this:
(defn partition [n coll]
(->> coll (iter) (,) (* n) (apply zip)))
This doesn't work anymore because we removed apply
. I wasn't sure if it was redundant or not at the time. But let's try it with the new syntax.
=> (defn partition-v1 [n coll]
... (->> coll iter , (* n) (zip #*)))
...
LexException: Ran into a RPAREN where it wasn't expected.
Not good. apply
still has uses, apparently. I'm not sure how well I liked the old version, but it feels like something should replace it, since #*
/#**
can't always do it.
You can sort of work around this with xi
=> (require [hy.extra.anaphoric [xi]])
None
=> (defn partition-v2 [n coll]
... (-> coll iter , (* n) ((xi zip #* x1))))
def partition_v2(n, coll):
return (lambda x1: zip(*x1))(((iter(coll),) * n))
None
But this adds a useless lambda in the compilation. apply
didn't require an extra call like this. Maybe some kind of macro could work.