Ich versuche, eine Methode zu finden, um Partition (mit [] Padding) in Clojure zu implementieren. Ich denke, es ist machbar Schleife und wieder auftreten und in die Liste Abbildung:Erneutes Implementieren der Partition in clojure
(defn collect-h [v n]
(loop [i n
res []
lst v
]
(if (= 0 i)
res
(recur (dec i) (cons (first lst) res) (next lst))
)
)
)
Das Problem ist also, dass die Umsetzung funktioniert nur auf der ersten Reihe der Antwort „(collect-h [1 2 3 4 5 6 7 8 9 10] 3)
wird ((1 2 3))
geben“. Also muss ich es der ganzen Sammlung zuordnen und die erste n
Nummer in jeder Schleife entfernen, aber das sieht nicht wirklich effizient aus. Ich frage mich, ob es einen besseren Weg gibt, es zu lösen.
Edit:
so sollte es so funktionieren:
(collect-h [1 2 3 4 5 6 7 8 9 10] 3) ;; ((1 2 3) (4 5 6) (7 8 9) (10))
, die gleiche ist
(partition 3 3 [] [1 2 3 4 5 6 7 8 9 10])
Können Sie ein Beispiel für es zu benutzen? Genauer gesagt, was Sie hineinlegen wollen und was Sie wollen, dass es zurückkehrt. – Mike
@Mike mein schlechtes. Ich habe die Frage bearbeitet. – Yar
Es gibt eine Kernfunktion 'partition-all', die genau das zu tun scheint, was Sie wollen ... versuchen Sie es zu implementieren? Blick auf den Quellcode? https://github.com/clojure/clojure/blob/clojure-1.7.0/src/clj/clojure/core.clj#L6947 –