aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cantedraw.asd1
-rw-r--r--model.lisp37
-rw-r--r--packages.lisp4
3 files changed, 42 insertions, 0 deletions
diff --git a/cantedraw.asd b/cantedraw.asd
index ede4524..653afb4 100644
--- a/cantedraw.asd
+++ b/cantedraw.asd
@@ -2,6 +2,7 @@
:components ((:file "packages")
(:file "lib.macros")
(:file "lib.functions")
+ (:file "model")
(:file "main"))
:build-operation "program-op"
:build-pathname "bin/cantedraw"
diff --git a/model.lisp b/model.lisp
new file mode 100644
index 0000000..7ce8b99
--- /dev/null
+++ b/model.lisp
@@ -0,0 +1,37 @@
+;;; model.lisp - 2025-02-14
+
+;; 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:
+
+;; Model of cards and sets of cards in Lisp.
+
+;;; Code:
+
+(in-package :cantedraw.model)
+
+(deftype rank ()
+ `(or (member :Jack :Queen :King :Ace)
+ (integer 2 10)))
+
+(deftype suit ()
+ `(member :Diamonds :Clubs :Hearts :Spades :Joker))
+
+(deftype card () `(cons rank suit))
+
+(deftype int-card () `(integer 0 51))
+
+(fn cardsetp (lst) (-> (list) boolean)
+ (every #'(lambda (x) (typep x 'card)) lst))
+
+(deftype cardset () `(and list (satisfies cardsetp)))
+
diff --git a/packages.lisp b/packages.lisp
index 56d3727..cd99262 100644
--- a/packages.lisp
+++ b/packages.lisp
@@ -32,6 +32,10 @@
:range :take :split
:rev-map))
+(defpackage cantedraw.model
+ (:use :cl :cantedraw.lib.macros :cantedraw.lib.functions)
+ (:export :int-card :rank :suit :card :cardset))
+
(defpackage cantedraw.main
(:use :cl :cantedraw.lib.macros :cantedraw.lib.functions)
(:export :start))