【发布时间】:2018-06-15 03:29:14
【问题描述】:
假设,我有以下代码。
public int divide(int dividend, int divisor) {
if( divisor == 0 || (dividend == Integer.MIN_VALUE && divisor == -1))
throw new DivisionException();
return dividend/divisor;
}
如何在函数式编程中编写这个?
我有一个类似于上面用 Java 编写的逻辑,并希望将其迁移到 Haskell/Clojure 中的功能代码。
在divide的调用者中如何处理?
我知道上面的代码是完全命令式的。编写它并没有考虑到将来将其迁移到 FP。
请用 Haskell 或 Clojure 中的示例代码告诉我。
【问题讨论】:
-
在 FP 中,您有代数数据结构,在这种情况下可以使用的数据结构是 Either。
-
@Roman:如果可以的话,请用示例代码解释一下。
-
上面的代码如何“完全命令式”?它不是total,但它没有中间状态。您可以在 Haskell 中编写相同的代码,包括异常等等……您是否也认为这是必要的?
-
如果你认为异常是bottom的化身,那么上面的
divide方法在我看来referentially transparent;即它是function。
标签: java haskell design-patterns clojure functional-programming