43 lines
1.2 KiB
Common Lisp
43 lines
1.2 KiB
Common Lisp
(defun string-to-clist (str)
|
|
(coerce str 'list))
|
|
|
|
(defun clist-to-string (clist)
|
|
(if (atom clist)
|
|
(string clist)
|
|
(coerce clist 'string)))
|
|
|
|
(defun split-by-first (lst delim)
|
|
"Splits LST by the first instance of DELIM"
|
|
(let ((pos (position delim lst)))
|
|
(if pos
|
|
(cons (subseq lst 0 pos) (list (subseq lst (+ pos 1))))
|
|
(error (format nil "No instance of ~a was found in ~a" delim lst)))))
|
|
|
|
(defun split-by-completely (lst delim)
|
|
(if (or (null lst) (not (cdr lst)))
|
|
(cons (list (car lst)) nil)
|
|
(if (member delim lst)
|
|
(destructuring-bind (first rest) (split-by-first lst delim)
|
|
(cons first (split-by-completely rest delim)))
|
|
(list lst))))
|
|
|
|
(defun get-lines (input-string)
|
|
(with-input-from-string (s input-string)
|
|
(loop for line = (read-line s nil)
|
|
while line
|
|
collect line)))
|
|
|
|
(defun all (pred lst)
|
|
(if (not (cdr lst))
|
|
(funcall pred (car lst))
|
|
(and (funcall pred (car lst))
|
|
(all pred (cdr lst)))))
|
|
|
|
(defun remove-nth (n lst)
|
|
(if (or (null lst) (= n 0))
|
|
(cdr lst)
|
|
(cons (car lst)
|
|
(remove-nth
|
|
(- n 1)
|
|
(cdr lst)))))
|