True / false evaluation doesn't work as expected in Scheme
        Posted  
        
            by 
                ron
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by ron
        
        
        
        Published on 2012-12-15T16:23:11Z
        Indexed on 
            2012/12/15
            17:03 UTC
        
        
        Read the original article
        Hit count: 264
        
I'm trying to compare two booleans :
(if (equal? #f (string->number "123b"))
      "not a number"
      "indeed a number")  
When I run this in the command line of DrRacket I get "not a number" , however , when I 
put that piece of code in my larger code , the function doesn't return that string ("not a number") , here's the code : 
(define (testing x y z)
    (define badInput "ERROR")  
    (if (equal? #f (string->number "123b"))
          "not a number"
          "indeed a number")  
    (display x))
And from command line : (testing "123" 1 2)
displays : 123
Why ?
Furthermore , how can I return a value , whenever I choose ?
Here is my "real" problem :
I want to do some input check to the input of the user , but the thing is , that I want to return the error message if I need , before the code is executed , because if won't - then I would run the algorithm of my code for some incorrect input :
(define (convert originalNumber s_oldBase s_newBase)
(define badInput "ERROR")  
  ; Input check - if one of the inputs is not a number then return ERROR
(if (equal? #f (string->number originalNumber))
      badInput)
(if (equal? #f (string->number s_oldBase))
      badInput)
(if (equal? #f (string->number s_newBase))
      badInput)  
(define oldBase (string->number s_oldBase))  
(define newBase (string->number s_newBase))    
(define outDecimal (convertIntoDecimal originalNumber oldBase))
(define result "") ; holds the new number
(define remainder 0) ; remainder for each iteration
(define whole 0)     ; the whole number after dividing
(define temp 0)  
(do()
  ((= outDecimal 0)) ; stop when the decimal value reaches 0
  (set! whole (quotient outDecimal newBase))  ; calc the whole number
  (set! temp (* whole newBase)) 
  (set! remainder (- outDecimal temp)) ; calc the remainder
  (set! result (appending result remainder))        ; append the result
  (set! outDecimal (+ whole 0))        ; set outDecimal = whole
) ; end of do
  (if (> 1 0)
      (string->number (list->string(reverse (string->list result)))))
) ;end of method
This code won't work since it uses another method that I didn't attach to the post (but it's irrelevant to the problem . Please take a look at those three IF-s ... I want to return "ERROR" if the user put some incorrect value , for example (convert "23asb4" "b5" "9")
Thanks
© Stack Overflow or respective owner