(in-package :cl-user)
(defpackage ca.mhcat.advent2022
(:use :cl))
(in-package :ca.mhcat.advent2022)
(defun load-lines (fname)
(let ((sysroot (asdf:system-source-directory :ca.mhcat.advent2022))
(frelpath (merge-pathnames (pathname "data/") (pathname fname))))
(with-open-file (stream (merge-pathnames frelpath sysroot))
(loop for line = (read-line stream nil)
while line collect line))))
(defun compose (&rest fns)
"Paul Graham, with some refinement from stackoverflow:
https://stackoverflow.com/questions/5928106/compose-example-in-paul-grahams-ansi-common-lisp"
(lambda (arg)
(reduce 'funcall fns
:from-end t
:initial-value arg)))
(defun juxtapose (&rest fns)
(lambda (arg)
(reduce (lambda (lst fn)
(cons (funcall fn arg) lst))
(reverse fns)
:initial-value (list))))