diff options
Diffstat (limited to 'src/types.lisp')
-rw-r--r-- | src/types.lisp | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/src/types.lisp b/src/types.lisp index c845b2d..4b24219 100644 --- a/src/types.lisp +++ b/src/types.lisp @@ -19,6 +19,9 @@ (defmethod content ((object (eql 'empty-line))) (list (make-text ""))) +(defmethod print-object ((object text) stream) + (format stream "#<TEXT \"~A\">" (content object))) + (defclass closure () ((function :reader closure-function :initarg :function @@ -50,21 +53,6 @@ (defun closurep (object) (typep object 'closure)) -(defun group (item sequence &key (test #'eql)) - (group-if #'(lambda (x) (funcall test item x)) sequence)) - -(defun group-if (predicate sequence) - (loop :for (head . tail) :on sequence - :while (funcall predicate head) - :collect head :into group - :finally - (return (values group (if (not (funcall predicate head)) - (cons head tail) - tail))))) - -(defun group-if-not (predicate sequence) - (group-if (complement predicate) sequence)) - (defun whitespacep (char-or-string) (if (stringp char-or-string) (every #'whitespacep char-or-string) @@ -104,6 +92,9 @@ (defun object-symbol-p (object) (and (objectp object) (eq (object-type object) :symbol))) +(deftype object-symbol () + `(satisfies object-symbol-p)) + (defmethod print-object ((object object) stream) (format stream "#<OBJECT :TYPE ~A :VALUE ~A>" (object-type object) (object-value object))) |