Conj is polymorphic on its first argument. If you pass it a vector, it'll add to the back, if a list, the front. The collection is responsible for deciding the most efficient way to add an element.
Cons always adds to the front, creating a linked-list node pointing to the rest. Also, cons takes the sequence as the second argument. On Thu, Apr 24, 2014 at 11:10 AM, Jiacai Liu <[email protected]> wrote: > hi everyone: > I use Clojure to solve SICP 2.22 > <http://www.billthelizard.com/2011/01/sicp-221-223-mapping-over-lists.html> > . > The problem is to rewrite a map fn in a iterative way,here it want to get > the square of each element in a list > Method 1: > (defn square-list [items] > (defn iter [things answer] > (if (empty? things) > answer > (iter > (rest things) > (cons (square (first things)) answer)))) > (iter items nil)) > This method just return opposite result. > (square-list (range 1 10)) > ;===>(81 64 49 36 25 16 9 4 1) > > I think all I need is to swap the position of (square (first things)) > andanswer,then > I can get the right order > I write fn below: > Method 2 > (defn square-list [items] > (defn iter [things answer] > (if (empty? things) > answer > (iter > (rest things) > (conj answer (square (first things)))))) > (iter items nil)) > However, it still return opposite order. > Did I misuse cons and conj or I ignore something? > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
