On Apr 18, 2012, at 5:17 AM, Roelof Wobben wrote:

> The function does only have to react on backspace , left , right .
> Give no reaction on tab , rubout or the other keys with a length more then 1.
> When given another key with length 1 it has to insert the key.
> 
> So i thought this would work :
> 
> (define (edit e k)
>  (cond
>     [  (and(key=? "right" k) (> (string-length (editor-post e)) 0)) 
> (make-editor(string-append (editor-pre e) (string-first (editor-post e) )) 
> (string-rest (editor-post e) ))]
>     [  (and(key=? "left" k) (> (string-length (editor-pre e)) 0)) 
> (make-editor ( string-remove-last (editor-pre e) ) (string-append 
> (string-last(editor-pre e))  (editor-post e)))]
>     [  (and (key=? "\b" k) (> (string-length (editor-pre e)) 0)) (make-editor 
> (string-remove-last (editor-pre e)) (editor-post e))]
>     [  (not ( or (key=? "\t" k ) (key=? "\u007F" k) (key=? "right" k))) ( 
> string-append (editor-pre e) k)]
>     [else e]
>     ))
> 
> but now when someone press the right-key the first get executed but also the 
> not rule.
> I thought that cond works if one rule is true the other gets ignored. But it 
> looks like that's not true.

That definitely should be true.  Can you show us a test case that triggers the 
incorrect behavior?

Remember, you shouldn't be running an animation using this event handler until 
the event handler passes all of its test cases in isolation.

My first guess was mismatched parentheses, so I copied and pasted your code 
into DrRacket, then inserted a bunch of newlines and tabs so I could spot 
mismatches by indentation.  The result was clearer, but I didn't see any 
parenthesis problems.  What I did notice is that one case doesn't obey the 
contract: it returns the wrong type.


Stephen Bloch
sbl...@adelphi.edu


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

Reply via email to