#lang scheme/base (require htdp/error) (provide string->integer-list integer-list->string file->string write-string-to-file) (define (string->integer-list s) (check-arg 'string->integer-list (string? s) s "string" 0) (map char->integer (string->list s))) (define (scalar-value? n) (or (<= 0 n 55295) (<= 57344 n 1114111))) (define (integer-list->string lis) (check-arg 'integer-list->string (and (list? lis) (andmap integer? lis) (andmap scalar-value? lis)) lis "list of scalar values" 0) (list->string (map integer->char lis))) (define (file->string filename) (check-arg 'file->string (string? filename) filename "file name" 0) (call-with-input-file filename (lambda (port) (let loop ((rev '())) (let ((s (read-string 4096 port))) (cond ((eof-object? s) (apply string-append (reverse rev))) ((<= (string-length s) 4096) (apply string-append (reverse (cons s rev)))) (loop (cons s rev)))))))) (define (write-string-to-file string filename) (check-arg 'write-string-to-file (string? string) string "string" 0) (check-arg 'write-string-to-file (string? filename) filename "file name" 1) (call-with-output-file filename (lambda (port) (display string port)) #:exists 'replace))