【发布时间】:2012-02-03 11:02:33
【问题描述】:
我今天注意到这样的定义
safeDivide x 0 = x
safeDivide = (/)
不可能。我只是好奇这背后的(好的)原因是什么。一定有一个非常好的(毕竟是 Haskell :))。
注意:我不是在寻找上述代码的替代实现建议,这是一个简单的例子来证明我的观点。
【问题讨论】:
-
你称之为“安全”?让它返回
Maybe或其他东西,或抛出一些已知异常,或在newtype上使用它,专门用于您视为成员的非退化函数,例如L² Hilbert 空间(即仅定义模空集);那将是安全的。仅仅为所有Fractional实例定义x/0=xad hoc 是非常不规范的! ——嗯,这可能只是一个例子。 -
+1 哇,使用 Haskell 很多年了,从来没有注意到这样的定义是不允许的!
-
@leftaroundabout
safeDivide x 0 = Nothing; safeDivide = Just .: (/)更好? :) -
@DanBurton 看起来更好。不过你can't define it this way...
-
@leftaroundabout 是的,这就是 xD 定义一个实际上“安全”的版本的要点,并且仍然存在同样的问题。
标签: haskell