application/octet-stream
•
1.84 KB
•
52 lines
;;; Nujel - Copyright (C) 2020-2021 - Benjamin Vincent Schulenburg
;;; This project uses the MIT license, a copy should be included under /LICENSE
;;;
;;; A bunch of procedurs that work on all collections where the collection primitives are implemented
(defn sum (c)
"Return the sum of every value in collection C"
(reduce c + 0))
(defn every? (l p)
"Returns #t if P is true for every entry of collection L"
(reduce l (fn (a b) (and a (p b))) #t))
(defn join (l glue)
"Join every element of α together into a string with GLUE inbetween"
(when-not glue (set! glue ""))
(if-not l "" (reduce l (fn (a b) (if a (cat a glue b) b)) #nil)))
(defn for-each (l f)
"Runs F over every item in collection L"
(reduce l (fn (a b) (f b)) #nil))
(defn count (l p)
"Count the number of items in L where P is true"
(if p
(reduce l (fn (a b) (+ a (if (p b) 1 0))) 0)
(reduce l (fn (a b) (+ a 1)) 0)))
(defn min l
"Returns the minimum value of its arguments"
(reduce l (fn (a b) (if (< a b) a b))))
(defn max l
"Returns the maximum value of its arguments"
(reduce l (fn (a b) (if (> a b) a b))))
(defn delete (l e)
"Returns a filtered list l with all elements equal to e omitted"
(filter l (fn (a) (not (= a e)))))
(defn remove (l p)
"Returns a filtered list l with all elements where P equal true removed"
(filter l (fn (a) (not (p a)))))
(def flatten (let*
(defn flatten-λ (a b)
(cond ((collection? b ) (append (reduce b flatten-λ #nil) a))
(#t (cons b a))))
(defn flatten (l)
"Flatten a collection of collections into a simple list"
(if-not (collection? l) l
(nreverse (reduce l flatten-λ #nil))))))