Scheme - 阻止程序在除以0时崩溃

时间:2015-10-09 03:15:50

标签: scheme racket zero divide

我的程序从文件中断函数,比如

   (   10          (print "+1/+0    = " (/ (+ 1) (+ 0))))
   (   11          (print "-1/+0    = " (/ (- 1) (+ 0))))

除了我的程序崩溃

/: division by zero
     context...:

我知道我可以将0.0添加到0,但还有另一种方法可能更简单吗?

1 个答案:

答案 0 :(得分:1)

好吧,你可以处理错误并显示一条消息......

(with-handlers ([exn:fail? (lambda (exn)
                             (printf "+1/+0    = +inf.0"))])
  (printf "+1/+0    = ~s" (/ (+ 1) (+ 0))))

...或者您可以转换每个数字以确保使用浮点除法:

(printf "+1/+0    = ~s"
        (/ (exact->inexact (+ 1)) (exact->inexact (+ 0))))

但为什么要这么麻烦?如果您知道整数除以零并且 会使程序崩溃,那么请确保在输入中直接使用浮点除法文件:

(printf "+1/+0    = ~s" (/ (+ 1.0) (+ 0.0)))

上述任何选项都会打印相同的结果:

+1/+0    = +inf.0