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: 172

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

Related posts about string

Related posts about functional-programming