aboutsummaryrefslogtreecommitdiff
path: root/cantedraw.lisp
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2025-02-11 00:48:14 +0000
committerAryadev Chavali <aryadev@aryadevchavali.com>2025-02-11 00:54:01 +0000
commit90ef834393c819e708800c1a759c183ccdd25842 (patch)
treea07023783890e9744479e53f3fa5a1a90a58a483 /cantedraw.lisp
parent9b3d8e471a8ab5280898095dcef1b77cf7570241 (diff)
downloadcantedraw-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.lisp49
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 _))))