From 4c27e7d5c1bf118d62da28e2be9a0983022190e3 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Fri, 14 Feb 2025 15:12:10 +0000 Subject: cantedraw.lisp -> main.lisp --- main.lisp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 main.lisp (limited to 'main.lisp') diff --git a/main.lisp b/main.lisp new file mode 100644 index 0000000..32a0088 --- /dev/null +++ b/main.lisp @@ -0,0 +1,49 @@ +;;; main.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 . + +;;; Commentary: + +;; Implementation of `main' package. Defines the entrypoint of the program, +;; handling any input from the user and passing it into the system. + +;;; Code: + +(in-package :main) + +(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 _)))) -- cgit v1.2.3-13-gbd6f