             (< 0 (num-rows word-array) )
             (< 0 (num-cols word-array) ) ] 
     :post [ (vector? %) ] }
-  (println "word-array:" word-array)
   (vec
     (for [idx (range 0 (num-cols word-array)) ]
       (let [curr-col (get-array-col word-array idx)]
-        (println "idx=" idx "  curr-col:" curr-col)
         (frequencies curr-col)) )))
 
+(defn filter-with 
+  "Returns values from data-seq where corresponding pred-seq elements are truthy."
+  [pred-seq data-seq]
+  (let [ both-seq     (map vector pred-seq data-seq )
+         filt-seq     (filter #(% 0) both-seq)
+         result       (vec (map second filt-seq)) ]
+    (println "both-seq"   both-seq)
+    (println "filt-seq"   filt-seq)
+    (println "result"     result)
+    result
+  ) )
+(def data-vec (range 5))
+(def pred-vec [ true false true false true nil false true ])
+(filter-with pred-vec data-vec )
 
 (defn run-tests []
+  (println "----------------------------------------")
+  (println "Tests:")
+
   ; Manipulation of strings/vectors/character seq's
   (assert (= (vec "abcd")                [\a \b \c \d] ))
   (assert (= (str/join  (vec "abcd"))    "abcd" ))

             [ {\a 1, \b 1, \c 1} {\b 1, \c 1} {\c 1} ] ))
  (assert (= (apply merge-with + (map frequencies ["abc" "bc" "c"]) )
             {\a 1 \b 2 \c 3} ))
)



    (assert (= (get-array-col tstArr 2) [:c  3 \c] ))
  )

  ; Use of (frequencies...) and (merge-with...)
  (assert (= (frequencies "abbccc")          
             {\a 1, \b 2, \c 3} ))
