diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-02-11 00:48:14 +0000 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-02-11 00:54:01 +0000 |
commit | 90ef834393c819e708800c1a759c183ccdd25842 (patch) | |
tree | a07023783890e9744479e53f3fa5a1a90a58a483 /cantedraw.lisp | |
parent | 9b3d8e471a8ab5280898095dcef1b77cf7570241 (diff) | |
download | cantedraw-90ef834393c819e708800c1a759c183ccdd25842.tar.gz cantedraw-90ef834393c819e708800c1a759c183ccdd25842.tar.bz2 cantedraw-90ef834393c819e708800c1a759c183ccdd25842.zip |
odraw -> cantedraw
Why name it something unique when this is what I'm going to be making
at the end of it all? Just makes it more confusing for the end user.
Diffstat (limited to 'cantedraw.lisp')
-rw-r--r-- | cantedraw.lisp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/cantedraw.lisp b/cantedraw.lisp new file mode 100644 index 0000000..4380d8a --- /dev/null +++ b/cantedraw.lisp @@ -0,0 +1,49 @@ +;;; cantedraw.lisp - 2025-02-11 + +;; Copyright (C) 2025 Aryadev Chavali + +;; This program is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +;; FOR A PARTICULAR PURPOSE. See the GNU General Public License Version 2 for +;; details. + +;; You may distribute and modify this code under the terms of the GNU General +;; Public License Version 2, which you should have received a copy of along with +;; this program. If not, please go to <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Implementation of `cantedraw' package. Defines the entrypoint of the program, +;; handling any input from the user and passing it into the system. + +;;; Code: + +(in-package :cantedraw) + +(fn read-input (&optional (prompt "> ")) (-> (&optional string) string) + (format t "~a" prompt) + (force-output) + (read-line)) + +(fn parse-integers (input) (-> (string) list) + (->> input + uiop:split-string + (mapcar #'parse-integer*) + (remove-if #'null))) + +(fn read-integers () (-> nil list) + (->> (read-input "Enter numbers: ") + parse-integers)) + +(fn read-until-integers () (-> nil list) + (let ((inp (read-integers))) + (while (null inp) + (format t "Need at least one integer...~%") + (force-output) + (setq inp (read-integers))) + inp)) + +(defun start () + (--> (read-until-integers) + (cons '+ _) + (format t "~a = ~a~%" _ (eval _)))) |