(let ( (numMin 10) (numMax 1000000001) ) (call/cc(lambda(return)(let loop((turn 0)) (let ((chkNum (if(= 0 turn) 100 (floor(/(+ numMin numMax) 2))))) (format #T "? ~d~%" chkNum)(flush) (let ((chk (read-line))) (if(string=? "1" chk) (set! numMin chkNum) (if(string=? "-1" chk) (set! numMax chkNum) (begin (format #T "! ~d~%" (+ chkNum turn))(flush) (return) ))) (when(< 0 numMin) (set! numMin (- numMin 1))) (set! numMax (- numMax 1)) (loop (+ 1 turn)) ) ) ))) )