X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fstring.lisp;h=8bead9b5573383120cf35282e09b0d0041052152;hb=f5ffe129c45d75d9f360d02d9b8823907b163347;hp=aebad3a67702370f659f0a54b040607c79196680;hpb=4a3e1529c48e1ea732e3b76c75072364d63f2a26;p=jscl.git diff --git a/src/string.lisp b/src/string.lisp index aebad3a..8bead9b 100644 --- a/src/string.lisp +++ b/src/string.lisp @@ -19,7 +19,9 @@ (t (char-to-string x)))) (defun string= (s1 s2) - (let ((n (length s1))) + (let* ((s1 (string s1)) + (s2 (string s2)) + (n (length s1))) (when (= (length s2) n) (dotimes (i n t) (unless (char= (char s1 i) (char s2 i)) @@ -27,13 +29,18 @@ (defun string< (s1 s2) (let ((len-1 (length s1)) - (len-2 (length s2))) - (cond ((= len-2 0) nil) - ((= len-1 0) 0) - (t (dotimes (i len-1 nil) - (when (char< (char s1 i) (char s2 i)) - (return-from string< i))))))) - + (len-2 (length s2))) + (cond ((= len-2 0) nil) + ((= len-1 0) 0) + (t (dotimes (i len-1 nil) + (when (char< (char s1 i) (char s2 i)) + (return-from string< i)) + (when (and (= i (1- len-1)) (> len-2 len-1)) + (return-from string< (1+ i)))))))) + +(defun stringp (s) + (stringp s)) + (define-setf-expander char (string index) (let ((g!string (gensym)) (g!index (gensym))