假设我有一个函数,其定义域为所有大于 0 的整数。我希望其他输入的结果未定义。为了简单起见,我们假设这是增量函数。在 Haskell 中,我可以通过类似的东西来实现这一点
f :: Integer -> Integer
f x
| x > 0 = x + 1
| otherwise = undefined
当然,这个例子很简单,但应该很清楚我想要实现什么。我不知道如何在方案中实现类似的效果。
(define (f x)
(if (> x 0)
(+ x 1)
(?????)))
我的想法是只在其中添加一个错误
,但是有什么方法可以更紧密地复制 Haskell 行为吗?
最佳答案
您的问题与this one相关其中的答案指出,在 R5RS 中(我猜 MIT 方案部分支持?),带有一个分支的 if
返回一个“未指定的值”。所以与 haskell 代码等效的应该是:
(define (f x)
(if (> x 0)
(+ x 1)))
您可能已经知道这一点:在 haskell 中,undefined
是根据 error
定义的,主要在开发中用作稍后删除的占位符。定义 haskell 函数的正确方法是为其指定一个类型,例如:Integer -> Maybe Integer
。
关于haskell - 表示 MIT 方案中未定义的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112546/