[racket] Fwd: Re: Is this a good design

From: Pierpaolo Bernardi (olopierpa at gmail.com)
Date: Fri Mar 2 04:37:23 EST 2012

On Fri, Mar 2, 2012 at 09:41, Roelof Wobben <r.wobben at home.nl> wrote:


> I did some study on that chapter but I cannnot make it work,
> This is what I have so  far :
>
> ;;String -> String
> ;; Get the first character of a string (s) if there is one. error otherwise.
> ;; given "aaaa" expected "a"
> ;; given "" expected "
> (define (first-string s)
>  (cond
>    [(eq? s "") (error "first-string" "Empty string found")]    ;; check for
> a empty string.if so put a error message
>    [(and (string? s) (not(eq? s "")))  (string-ith s 0)]              ;; if
> it's a non-empty string then do the trick.
>    [(number? s) (error "first-string" "No string found")]      ;; if it's a
> number then put a error message
>    [(boolean? s) (error "first-string" "No string found")]     ;; if it's a
> boolean then put a error message
>    [(image? s) (error "first string" "No string found")]         ;; if it's
> a image put a error message
>    ))
>
> But when I do (first-string ") then still DrRacket gives his own error
> message instead of the one I made.
> Any tips are welcome here.

The immediate problem is that eq? is not the right predicate for
checking for empty strings.  Use string=? or string-length.

Once fixed this, what happens if you call (first-string '(a b c)) ?

P.


Posted on the users mailing list.