|
|
|
|
@ -871,15 +871,15 @@ value rather than consuming a list to produce a single value." |
|
|
|
|
(-partition-after-pred #'booleanp '(t)) => '((t)) |
|
|
|
|
(-partition-after-pred #'booleanp '(0 t)) => '((0 t)) |
|
|
|
|
(--partition-after-pred (= (% it 2) 0) '()) => '() |
|
|
|
|
(--partition-after-pred (= (% it 2) 1) '()) => '() |
|
|
|
|
(--partition-after-pred (= (mod it 2) 1) '()) => '() |
|
|
|
|
(--partition-after-pred (= (% it 2) 0) '(0)) => '((0)) |
|
|
|
|
(--partition-after-pred (= (% it 2) 1) '(0)) => '((0)) |
|
|
|
|
(--partition-after-pred (= (mod it 2) 1) '(0)) => '((0)) |
|
|
|
|
(--partition-after-pred (= (% it 2) 0) '(0 1)) => '((0) (1)) |
|
|
|
|
(--partition-after-pred (= (% it 2) 1) '(0 1)) => '((0 1)) |
|
|
|
|
(--partition-after-pred (= (mod it 2) 1) '(0 1)) => '((0 1)) |
|
|
|
|
(--partition-after-pred (= (% it 2) 0) '(0 1 2)) => '((0) (1 2)) |
|
|
|
|
(--partition-after-pred (= (% it 2) 1) '(0 1 2)) => '((0 1) (2)) |
|
|
|
|
(--partition-after-pred (= (mod it 2) 1) '(0 1 2)) => '((0 1) (2)) |
|
|
|
|
(--partition-after-pred (= (% it 2) 0) '(0 1 2 3)) => '((0) (1 2) (3)) |
|
|
|
|
(--partition-after-pred (= (% it 2) 1) '(0 1 2 3)) => '((0 1) (2 3)) |
|
|
|
|
(--partition-after-pred (= (mod it 2) 1) '(0 1 2 3)) => '((0 1) (2 3)) |
|
|
|
|
(--partition-after-pred t '()) => () |
|
|
|
|
(--partition-after-pred t '(0)) => '((0)) |
|
|
|
|
(--partition-after-pred t '(0 1)) => '((0) (1)) |
|
|
|
|
@ -1055,7 +1055,9 @@ related predicates." |
|
|
|
|
(-cons*) => () |
|
|
|
|
(-cons* ()) => () |
|
|
|
|
(-cons* 1 ()) => '(1) |
|
|
|
|
(-cons* 1 '(2)) => '(1 2)) |
|
|
|
|
(-cons* 1 '(2)) => '(1 2) |
|
|
|
|
;; Assert that &rest conses a fresh list in case that ever changes. |
|
|
|
|
(let ((l (list 1 2))) (apply #'-cons* l) l) => '(1 2)) |
|
|
|
|
|
|
|
|
|
(defexamples -snoc |
|
|
|
|
(-snoc '(1 2 3) 4) => '(1 2 3 4) |
|
|
|
|
@ -1769,30 +1771,83 @@ or readability." |
|
|
|
|
=> '((1 (1)) (1 (2)) (5 (5)))) |
|
|
|
|
|
|
|
|
|
(defexamples -on |
|
|
|
|
(-sort (-on '< 'length) '((1 2 3) (1) (1 2))) => '((1) (1 2) (1 2 3)) |
|
|
|
|
(-min-by (-on '> 'length) '((1 2 3) (4) (1 2))) => '(4) |
|
|
|
|
(-min-by (-on 'string-lessp 'number-to-string) '(2 100 22)) => 22 |
|
|
|
|
(-max-by (-on '> 'car) '((2 2 3) (3) (1 2))) => '(3) |
|
|
|
|
(-sort (-on 'string-lessp 'number-to-string) '(10 12 1 2 22)) => '(1 10 12 2 22) |
|
|
|
|
(funcall (-on '+ '1+) 1 2) => 5 |
|
|
|
|
(funcall (-on '+ 'identity) 1 2) => 3 |
|
|
|
|
(funcall (-on '* 'length) '(1 2 3) '(4 5)) => 6 |
|
|
|
|
(funcall (-on (-on '+ 'length) 'cdr) '(1 2 3) '(4 5)) => 3 |
|
|
|
|
(funcall (-on '+ (lambda (x) (length (cdr x)))) '(1 2 3) '(4 5)) => 3 |
|
|
|
|
(-sort (-on '< 'car) '((3 2 5) (2) (1 2))) => '((1 2) (2) (3 2 5)) |
|
|
|
|
(-sort (-on '< (lambda (x) (length x))) '((1 2 3) (1) (1 2))) => '((1) (1 2) (1 2 3)) |
|
|
|
|
(-sort (-on (-on '< 'car) 'cdr) '((0 3) (2 1) (4 2 8))) => '((2 1) (4 2 8) (0 3)) |
|
|
|
|
(-sort (-on '< 'cadr) '((0 3) (2 1) (4 2 8))) => '((2 1) (4 2 8) (0 3))) |
|
|
|
|
(-sort (-on #'< #'length) '((1 2 3) (1) (1 2))) => '((1) (1 2) (1 2 3)) |
|
|
|
|
(funcall (-on #'min #'string-to-number) "22" "2" "1" "12") => 1 |
|
|
|
|
(-min-by (-on #'> #'length) '((1 2 3) (4) (1 2))) => '(4) |
|
|
|
|
(-min-by (-on #'string< #'number-to-string) '(2 100 22)) => 22 |
|
|
|
|
(-max-by (-on #'> #'car) '((2 2 3) (3) (1 2))) => '(3) |
|
|
|
|
(-sort (-on #'string< #'number-to-string) '(12 1 2 22)) => '(1 12 2 22) |
|
|
|
|
(funcall (-on #'+ #'1+) 1 2) => 5 |
|
|
|
|
(funcall (-on #'+ #'identity) 1 2) => 3 |
|
|
|
|
(funcall (-on #'* #'length) '(1 2 3) '(4 5)) => 6 |
|
|
|
|
(funcall (-on (-on #'+ #'length) #'cdr) '(1 2 3) '(4 5)) => 3 |
|
|
|
|
(funcall (-on #'+ (lambda (x) (length (cdr x)))) '(1 2 3) '(4 5)) => 3 |
|
|
|
|
(-sort (-on #'< #'car) '((3 2 5) (2) (1 2))) => '((1 2) (2) (3 2 5)) |
|
|
|
|
(-sort (-on #'< (lambda (x) (length x))) '((1 2 3) (1) (1 2))) |
|
|
|
|
=> '((1) (1 2) (1 2 3)) |
|
|
|
|
(-sort (-on (-on #'< #'car) #'cdr) '((0 3) (2 1) (4 2 8))) |
|
|
|
|
=> '((2 1) (4 2 8) (0 3)) |
|
|
|
|
(-sort (-on #'< #'cadr) '((0 3) (2 1) (4 2 8))) => '((2 1) (4 2 8) (0 3)) |
|
|
|
|
(funcall (-on #'not #'not) nil) => nil |
|
|
|
|
(funcall (-on #'+ #'1+) 1 10 100 1000) => 1115 |
|
|
|
|
(funcall (-on #'+ #'1+) 1 10 100) => 114 |
|
|
|
|
(funcall (-on #'+ #'1+) 1 10) => 13 |
|
|
|
|
(funcall (-on #'+ #'1+) 1) => 2 |
|
|
|
|
(funcall (-on #'+ #'1+)) => 0 |
|
|
|
|
(funcall (-on #'1+ #'1+) 0) => 2 |
|
|
|
|
(funcall (-on #'+ #'*)) => 0 |
|
|
|
|
(funcall (-on #'* #'+)) => 1) |
|
|
|
|
|
|
|
|
|
(defexamples -flip |
|
|
|
|
(funcall (-flip '<) 2 1) => t |
|
|
|
|
(funcall (-flip '-) 3 8) => 5 |
|
|
|
|
(-sort (-flip '<) '(4 3 6 1)) => '(6 4 3 1)) |
|
|
|
|
(-sort (-flip #'<) '(4 3 6 1)) => '(6 4 3 1) |
|
|
|
|
(funcall (-flip #'-) 3 2 1 10) => 4 |
|
|
|
|
(funcall (-flip #'1+) 1) => 2 |
|
|
|
|
(funcall (-flip #'<) 2 1) => t |
|
|
|
|
(funcall (-flip #'list) 1 2 3) => '(3 2 1) |
|
|
|
|
(funcall (-flip #'list) 1 2) => '(2 1) |
|
|
|
|
(funcall (-flip #'list) 1) => '(1) |
|
|
|
|
(funcall (-flip #'list)) => '() |
|
|
|
|
;; Assert that &rest conses a fresh list in case that ever changes. |
|
|
|
|
(let ((a (list 1 2 3 4))) (apply (-flip #'-) a) a) => '(1 2 3 4)) |
|
|
|
|
|
|
|
|
|
(defexamples -rotate-args |
|
|
|
|
(funcall (-rotate-args -1 #'list) 1 2 3 4) => '(2 3 4 1) |
|
|
|
|
(funcall (-rotate-args 1 #'-) 1 10 100) => 89 |
|
|
|
|
(funcall (-rotate-args 2 #'list) 3 4 5 1 2) => '(1 2 3 4 5) |
|
|
|
|
(funcall (-rotate-args -2 #'list) 1 2 3 4) => '(3 4 1 2) |
|
|
|
|
(funcall (-rotate-args 0 #'list) 1 2 3 4) => '(1 2 3 4) |
|
|
|
|
(funcall (-rotate-args 1 #'list) 1 2 3 4) => '(4 1 2 3) |
|
|
|
|
(funcall (-rotate-args 2 #'list) 1 2 3 4) => '(3 4 1 2) |
|
|
|
|
(funcall (-rotate-args -2 #'list) 1 2 3) => '(3 1 2) |
|
|
|
|
(funcall (-rotate-args -1 #'list) 1 2 3) => '(2 3 1) |
|
|
|
|
(funcall (-rotate-args 0 #'list) 1 2 3) => '(1 2 3) |
|
|
|
|
(funcall (-rotate-args 1 #'list) 1 2 3) => '(3 1 2) |
|
|
|
|
(funcall (-rotate-args 2 #'list) 1 2 3) => '(2 3 1) |
|
|
|
|
(funcall (-rotate-args -2 #'list) 1 2) => '(1 2) |
|
|
|
|
(funcall (-rotate-args -1 #'list) 1 2) => '(2 1) |
|
|
|
|
(funcall (-rotate-args 0 #'list) 1 2) => '(1 2) |
|
|
|
|
(funcall (-rotate-args 1 #'list) 1 2) => '(2 1) |
|
|
|
|
(funcall (-rotate-args 2 #'list) 1 2) => '(1 2) |
|
|
|
|
(funcall (-rotate-args -2 #'list) 1) => '(1) |
|
|
|
|
(funcall (-rotate-args -1 #'list) 1) => '(1) |
|
|
|
|
(funcall (-rotate-args 0 #'list) 1) => '(1) |
|
|
|
|
(funcall (-rotate-args 1 #'list) 1) => '(1) |
|
|
|
|
(funcall (-rotate-args 2 #'list) 1) => '(1) |
|
|
|
|
(funcall (-rotate-args -2 #'list)) => '() |
|
|
|
|
(funcall (-rotate-args -1 #'list)) => '() |
|
|
|
|
(funcall (-rotate-args 0 #'list)) => '() |
|
|
|
|
(funcall (-rotate-args 1 #'list)) => '() |
|
|
|
|
(funcall (-rotate-args 2 #'list)) => '() |
|
|
|
|
(let ((a (list 1 2 3))) (apply (-rotate-args 2 #'-) a) a) => '(1 2 3)) |
|
|
|
|
|
|
|
|
|
(defexamples -const |
|
|
|
|
(funcall (-const 2) 1 3 "foo") => 2 |
|
|
|
|
(-map (-const 1) '("a" "b" "c" "d")) => '(1 1 1 1) |
|
|
|
|
(-sum (-map (-const 1) '("a" "b" "c" "d"))) => 4) |
|
|
|
|
(mapcar (-const 1) '("a" "b" "c" "d")) => '(1 1 1 1) |
|
|
|
|
(-sum (mapcar (-const 1) '("a" "b" "c" "d"))) => 4 |
|
|
|
|
(funcall (-const t)) => t |
|
|
|
|
(funcall (-const nil)) => nil |
|
|
|
|
(funcall (-const t) nil) => t |
|
|
|
|
(funcall (-const nil) nil) => nil) |
|
|
|
|
|
|
|
|
|
(defexamples -cut |
|
|
|
|
(funcall (-cut list 1 <> 3 <> 5) 2 4) => '(1 2 3 4 5) |
|
|
|
|
@ -1801,17 +1856,57 @@ or readability." |
|
|
|
|
(-filter (-cut < <> 5) '(1 3 5 7 9)) => '(1 3)) |
|
|
|
|
|
|
|
|
|
(defexamples -not |
|
|
|
|
(funcall (-not 'even?) 5) => t |
|
|
|
|
(-filter (-not (-partial '< 4)) '(1 2 3 4 5 6 7 8)) => '(1 2 3 4)) |
|
|
|
|
(funcall (-not #'numberp) "5") => t |
|
|
|
|
(-sort (-not #'<) '(5 2 1 0 6)) => '(6 5 2 1 0) |
|
|
|
|
(-filter (-not (-partial #'< 4)) '(1 2 3 4 5 6 7 8)) => '(1 2 3 4) |
|
|
|
|
;; Variadic `<' was introduced in Emacs 24.4. |
|
|
|
|
(funcall (-not (lambda (a b c) (and (< a b) (< b c)))) 1 2 3) => nil |
|
|
|
|
(funcall (-not (lambda (a b c) (and (< a b) (< b c)))) 3 2 1) => t |
|
|
|
|
(funcall (-not #'<) 1 2) => nil |
|
|
|
|
(funcall (-not #'<) 2 1) => t |
|
|
|
|
(funcall (-not #'+) 1) => nil |
|
|
|
|
(funcall (-not #'+)) => nil) |
|
|
|
|
|
|
|
|
|
(defexamples -orfn |
|
|
|
|
(-filter (-orfn 'even? (-partial (-flip '<) 5)) '(1 2 3 4 5 6 7 8 9 10)) => '(1 2 3 4 6 8 10) |
|
|
|
|
(funcall (-orfn 'stringp 'even?) "foo") => t) |
|
|
|
|
(-filter (-orfn #'natnump #'booleanp) '(1 nil "a" -4 b c t)) => '(1 nil t) |
|
|
|
|
(funcall (-orfn #'symbolp (-cut string-match-p "x" <>)) "axe") => 1 |
|
|
|
|
(funcall (-orfn #'= #'+) 1 1) => t |
|
|
|
|
(funcall (-orfn #'+ #'null)) => 0 |
|
|
|
|
(funcall (-orfn #'+ #'null) 1) => 1 |
|
|
|
|
(funcall (-orfn #'+ #'null) 1 2) => 3 |
|
|
|
|
(funcall (-orfn #'+ #'null) 1 2 3) => 6 |
|
|
|
|
(funcall (-orfn #'ignore #'+)) => 0 |
|
|
|
|
(funcall (-orfn #'ignore #'+) 1) => 1 |
|
|
|
|
(funcall (-orfn #'ignore #'+) 1 2) => 3 |
|
|
|
|
(funcall (-orfn #'ignore #'+) 1 2 3) => 6 |
|
|
|
|
(-filter (-orfn #'symbolp) '(a b 1 nil t 2)) => '(a b nil t) |
|
|
|
|
(-filter (-orfn #'null) '(a b 1 nil t 2)) => '(nil) |
|
|
|
|
(-filter (-orfn) '(nil t)) => '() |
|
|
|
|
(-orfn #'null) => #'null |
|
|
|
|
(-orfn) => #'ignore) |
|
|
|
|
|
|
|
|
|
(defexamples -andfn |
|
|
|
|
(funcall (-andfn (-cut < <> 10) 'even?) 6) => t |
|
|
|
|
(funcall (-andfn (-cut < <> 10) 'even?) 12) => nil |
|
|
|
|
(-filter (-andfn (-not 'even?) (-cut >= 5 <>)) '(1 2 3 4 5 6 7 8 9 10)) => '(1 3 5)) |
|
|
|
|
(-filter (-andfn #'numberp (-cut < <> 5)) '(a 1 b 6 c 2)) => '(1 2) |
|
|
|
|
(mapcar (-andfn #'numberp #'1+) '(a 1 b 6)) => '(nil 2 nil 7) |
|
|
|
|
(funcall (-andfn #'= #'+) 1 1) => 2 |
|
|
|
|
(funcall (-andfn #'ignore #'+)) => nil |
|
|
|
|
(funcall (-andfn #'ignore #'+) 1) => nil |
|
|
|
|
(funcall (-andfn #'ignore #'+) 1 2) => nil |
|
|
|
|
(funcall (-andfn #'+ #'ignore)) => nil |
|
|
|
|
(funcall (-andfn #'+ #'ignore) 1) => nil |
|
|
|
|
(funcall (-andfn #'+ #'ignore) 1 2) => nil |
|
|
|
|
(funcall (-andfn #'+ #'list)) => '() |
|
|
|
|
(funcall (-andfn #'+ #'list) 1) => '(1) |
|
|
|
|
(funcall (-andfn #'+ #'list) 1 2) => '(1 2) |
|
|
|
|
(funcall (-andfn #'list #'+)) => nil |
|
|
|
|
(funcall (-andfn #'list #'+) 1) => 1 |
|
|
|
|
(funcall (-andfn #'list #'+) 1 2) => 3 |
|
|
|
|
(funcall (-andfn #'* #'+)) => 0 |
|
|
|
|
(funcall (-andfn #'+ #'*)) => 1 |
|
|
|
|
(-andfn #'null) => #'null |
|
|
|
|
(funcall (-andfn)) => t |
|
|
|
|
(funcall (-andfn) nil) => t |
|
|
|
|
(funcall (-andfn) t) => t) |
|
|
|
|
|
|
|
|
|
(defexamples -iteratefn |
|
|
|
|
(funcall (-iteratefn (lambda (x) (* x x)) 3) 2) => 256 |
|
|
|
|
|