(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))
(return-from string= nil))))))
+(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))
+ (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))