-------- Originele bericht -------- Onderwerp: Re: [racket] Is this a good design Datum: Thu, 01 Mar 2012 10:05:25 +0100 Van: Roelof Wobben <r.wob...@home.nl> Aan: David Van Horn <dvanh...@ccs.neu.edu> You can imagine alternative statements of the program contract and
purpose that would lead to different code. One is to drop the non-empty assumption and state the error case: ;; String -> String ;; Get first character of string if there is one, error otherwise Then you'd want to specify the error behavior in examples (and write tests that tested this behavior) and make sure your code changed to reflect the revised class of data it consumes.
Oke, Because the contract says the input always be a string so I only have to check on empty strings because then there is no first character. So the function will be : ;; String -> String ;; Print a error message when the input is wrong. (define (print-foutmelding s) (string-append "Error:" s " on the function first-string")) ;; String -> String ;; Get first character of string (s) if there is one, error otherwise ;; given "aaa" expected "a" ;; given "" expected " Error: Empty string found on the function first string" (define (first-string s) (if (> (string-length s) 0) (string-ith s 0) (print-foutmelding "Empty string found"))) Yet another is:
;; Any -> String ;; Get first character if given a non-empty string, error otherwise
Because the input can be anything and only on strings the first character can be found I have to do two checks. On is the input a string and second is it a non-empty string. So the function will look like this : ;;String -> String ;; Put the error message on screen because it's a empty string. ;; given "Empty string" expect ""Error:Empty string found on the function first-string" ;; given "No String found" expect ""Error:No string found on the function first-string" (define (print-foutmelding s) (string-append "Error:" s " on the function first-string")) ;; Any -> String ;; Get first character of string (s) if there is one, error otherwise ;; given "aaa" expected "a" ;; given "" expected " Error: Empty string on the function first-string" ;; given "2" expected "Error : No string found on the function first-string (define (first-string s) (if (string? s) (if (> (string-length s) 0) (string-ith s 0) (print-foutmelding "Empty string found"))(print-foutmelding "No string found") )) Roelof
____________________ Racket Users list: http://lists.racket-lang.org/users