--- /dev/null
+(define-module (lang elisp primitives strings)
+ #:use-module (lang elisp internals fset)
+ #:use-module (lang elisp internals null)
+ #:use-module (lang elisp internals signal))
+
+(fset 'substring substring)
+
+(fset 'concat
+ (lambda args
+ (apply string-append
+ (map (lambda (arg)
+ (cond
+ ((string? arg) arg)
+ ((list? arg) (list->string arg))
+ ((vector? arg) (list->string (vector->list arg)))
+ (else (error "Wrong type argument for concat"))))
+ args))))
+
+(fset 'string-to-number string->number)
+
+(fset 'number-to-string number->string)
+
+(fset 'string-lessp (lambda->nil string<?))
+(fset 'string< 'string-lessp)
+
+(fset 'aref
+ (lambda (array idx)
+ (cond ((vector? array) (vector-ref array idx))
+ ((string? array) (char->integer (string-ref array idx)))
+ (else (wta 'arrayp array 1)))))
+
+(fset 'aset
+ (lambda (array idx newelt)
+ (cond ((vector? array) (vector-set! array idx newelt))
+ ((string? array) (string-set! array idx (integer->char newelt)))
+ (else (wta 'arrayp array 1)))))
+
+(fset 'stringp (lambda->nil string?))
+
+(fset 'vector vector)