haskell - 表示 MIT 方案中未定义的结果

标签 haskell scheme mit-scheme

假设我有一个函数,其定义域为所有大于 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/

相关文章:

functional-programming - 在这个具体案例中, "trace"应该如何在 Racket 中工作?

Python继承与实例化

排序算法 lisp-scheme

c - 如果此代码中 consed 对象的 car 和 cdr 是整数,如何打印它们?

parsing - "Sub-parsers"在管道-attoparsec

database - haskell "persistent"模型 : How to correctly define cross-reference?

haskell - 为什么组合两个函数不起作用?

haskell - `(<*>)` 应用仿函数的定义?

支持套车方案!并设置-CDR!在sicp中

vim - 设置负载噪音时出错?并在 MIT-Scheme 中自动退出