J'ai travaillé sur des problèmes sur 4Clojure aujourd'hui, et j'ai eu des problèmes sur Problème 28 en mettant en œuvre l'aplatissement.
Il y a quelques problèmes évidents avec mon code.
(fn [coll]
((fn flt [coll res]
(if (empty? coll)
res
(if (seq? (first coll))
(flt (into (first coll) (rest coll)) res)
(flt (rest coll) (cons (first coll) res))))) coll (empty coll)))
J'aurais besoin de quelques conseils sur la façon de penser à certains problèmes.
-
Comment m'assurer que je ne change pas l'ordre de la liste résultante ?
cons
yconj
Les deux ajoutent des éléments là où c'est le plus efficace (au début pour les listes, à la fin pour les vecteurs, etc.), je ne vois donc pas comment je suis censé avoir un quelconque contrôle sur ce point lorsque je travaille avec une séquence générique. -
Comment gérer les séquences imbriquées de différents types ? Par exemple, une entrée de
'(1 2 [3 4])
produira([3 4] 2 1)
tandis qu'une entrée de[1 2 '(3 4)]
produira(4 3 2 1)
-
Est-ce que j'aborde la question sous le "bon" angle ? Devrais-je utiliser une fonction interne récursive avec un accumulateur pour faire cela, ou est-ce que je rate quelque chose d'évident ?