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