Moving upward.

This commit is contained in:
Jaidyn Lev 2018-12-02 19:26:31 -06:00
parent 722e2f8782
commit 3236f7676e
3 changed files with 64 additions and 3 deletions

View File

@ -1,13 +1,15 @@
(defsystem "nih" (defsystem "nih"
:version "0.1" :version "0.3"
:author "Jaidyn Ann <jadedctrl@teknik.io>" :author "Jaidyn Ann <jadedctrl@teknik.io>"
:license "CC 0" :license "LGPLv3"
:depends-on ("cl-strings" "cl-ppcre") :depends-on ("cl-strings" "asdf-encodings" "cl-ppcre")
:components ((:module "src" :components ((:module "src"
:components :components
((:file "package") ((:file "package")
(:file "misc") (:file "misc")
(:file "file")
(:file "list") (:file "list")
(:file "date")
(:file "string/string") (:file "string/string")
(:file "string/word") (:file "string/word")
(:file "string/line") (:file "string/line")

View File

@ -27,6 +27,11 @@
:getf-string :getf-string
:getf-strings :getf-strings
:getf-car
:getf-cars
:getf-cadr
:getf-cadrs
:get-colon-values :get-colon-values
:remove-colon-values :remove-colon-values
:replace-colon-value :replace-colon-value

View File

@ -272,6 +272,60 @@ Example:
stack)) stack))
;; LIST_OF_SUBLISTS STRING --> LIST_OF_SUBLISTS_WITH_STRING_AS_CAR
(defun getf-cars (list value &key (stack '()) (test 'eq))
"Get items from list by an identifying string in `car`.
I.E., if the string is 'apple', any sublists like this:
('apple' 1 2 3)
will be returned."
;; just recurse through the list, adding each new matching
;; item to the `stack`
(if (and (< 0 (length list)) (listp list))
(if (ignore-errors
;; the item might not be a list; for our purposes, let's ignore that.
(funcall test
(car (car list)) ;; '( ( here ) )
value))
(getf-cars (cdr list) value
:test test
:stack (concatenate 'list stack (list (car list))))
(getf-cars (cdr list) value
:stack stack
:test test))
stack))
(defun getf-car (list value &key (test 'eq))
(car (getf-cars list value :test test)))
;; LIST_OF_SUBLISTS STRING --> LIST_OF_SUBLISTS_WITH_STRING_AS_CAR
(defun getf-cadrs (list value &key (stack '()) (test 'eq))
"Get items from list by an identifying string in `car`.
I.E., if the string is 'apple', any sublists like this:
('apple' 1 2 3)
will be returned."
;; just recurse through the list, adding each new matching
;; item to the `stack`
(if (and (< 0 (length list)) (listp list))
(if (ignore-errors
;; the item might not be a list; for our purposes, let's ignore that.
(funcall test
(cadr (car list)) ;; '( ( here ) )
value))
(getf-cadrs (cdr list) value
:test test
:stack (concatenate 'list stack (list (car list))))
(getf-cadrs (cdr list) value
:stack stack
:test test))
stack))
(defun getf-cadr (list value &key (test 'eq))
(car (getf-cadrs list value :test test)))
;; ---------------------------------------- ;; ----------------------------------------