 
 To get the first item in the list no questions asked, use `car'."
   (--first (funcall pred it) list))
+
+(defmacro --last (form list)
+  "Anaphoric form of `-last'."
+  (let ((n (make-symbol "needle")))
+    `(let (,n)
+       (--each ,list
+         (when ,form (setq ,n it)))
+       ,n)))
+
+(defun -last (pred list)
+  "Return the last x in LIST where (PRED x) is non-nil, else nil."
+  (--last (funcall pred it) list))
+
+(defmacro --count (pred list)
+  "Anaphoric form of `-count'."
+  (let ((r (make-symbol "result")))
+    `(let ((,r 0))
+       (--each ,list (when ,pred (setq ,r (1+ ,r))))
+       ,r)))
+
+(defun -count (pred list)
+  "Counts the number of items in LIST where (PRED item) is non-nil."
+  (--count (funcall pred it) list))
 
 (defun ---truthy? (val)
   (not (null val)))

(defalias '-only-some-p '-only-some?)
(defalias '--only-some-p '--only-some?)

(defun -take (n list)
  "Returns a new list of the first N items in LIST, or all items if there are fewer than N."
  (let (result)

                           "--drop-while"
                           "-drop-while"
                           "-split-at"
                           "-insert-at"
                           "--split-with"
                           "-split-with"
                           "-partition"
                           "-partition-all"
                           "-interpose"
                           "-interleave"
                           "--zip-with"
                           "-zip-with"
                           "-zip"
                           "--map-when"
                           "-map-when"
                           "--replace-where"
