You ignored part of what Asumu said, which (to paraphrase) is that your program should live and die by its contract. When you write down:

   String -> String

you're saying this program consumes a String and produces a String. If somebody applies your program to something that is *not* a string, they (not you) messed up by not using your program according to the contract you wrote down. When somebody misuses the program, who knows what happens. Maybe it signals an error, maybe it produces 7, maybe it melts your computer. So don't bother checking that the input is a String; assume it is. Let bad stuff happen if it isn't.

On the other hand, if somebody applies your program to a string and you produce something other than a string, well that's your fault; you messed up. So make sure you produce strings (on the assumption you're given a string).

Asumu also pointed out the corner case of the empty string, which you responded to by saying you can assume the string is not empty. That's fine, but *write it down*. How are we to know, as reader's of your contract and purpose statements, that we have to provide non-empty strings?

David

Oke,
Wierd idea that input control is not neccesarly. I have tried C and C++ and they empasise to do input control.
But oke then this is the new function.

;String -> String
;This function takes out the first character of a given non-empty string with the name s
; given "roelof" expect "r"
; given "example" expect "e"
(define (string-first s)
(string-ith s 0 ))

Roelof


____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to