Achievement unlocked!

    
(defn mult_first [a b]
    (* (first a) (first b)))</code>

(defn mult_rest [a b]
    (if (= (count a) 1) (mult_first a b)
        (+ (mult_first a b) (mult_rest (rest a) (rest b)))))

(defn dot [a b]
    (mult_rest a b))

(dot [2 3 4] [2 3 4])

29

It probably could be a lot more elegant and I’m probably breaking who-knows-how-many conventions and guidelines, but it’s still the first clojure program I ever wrote (can be used to calculate dot product of two arbitrarily long vectors, as long as they are equally long).

edit:

Turns out I was right, the dot can be written in much simpler and cleaner way:

(defn dot 
    "Returns the value of dot product of the vectors v1 and v2"
    [v1 v2] (reduce + (map * v1 v2)))

(thanks Minilight in Clojure: Vectors)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s