Op 2-3-2012 8:05, Roelof Wobben schreef:
Op 1-3-2012 23:11, David Van Horn schreef:
On 3/1/12 4:45 PM, Roelof Wobben wrote:
-------- 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") ))
If your program should signal errors, you should call the error
function; not produce a string.
David
____________________
Racket Users list:
http://lists.racket-lang.org/users
I understand but that part is not yet discussed in the book. Catching
error messags is in the last chapter and I now studying one of the
first chapters.
Roelof
____________________
Racket Users list:
http://lists.racket-lang.org/users
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.
Roelof
____________________
Racket Users list:
http://lists.racket-lang.org/users