【问题标题】:Convert an Exact-Rational to an Integer in Racket在 Racket 中将 Exact-Rational 转换为 Integer
【发布时间】:2022-01-12 13:45:51
【问题描述】:

我正在typed/racket 中编写一个函数来将表示十六进制值的Integers(0 或1)列表转换为十进制(Integer)。

功能:

#lang typed/racket
(: to-decimal (-> (Listof Integer) Integer))
(define (to-decimal hex-values)
  (for/fold
          ([index : Integer 0]
           [result : Integer 0]
           #:result result)
          ([v : Integer (reverse hex-values)])
          (values (add1 index) (+ result (* v (expt 2 index))))))

这无法进行类型检查。表达式(+ result (* v (expt 2 index))) 给了我这个错误type mismatch expected: Integer given: Exact-Rational

我知道整数是 Exact-Rational (source) 的子集。有什么办法可以让我的代码类型检查?也许通过将失败表达式返回的值转换为 Integer

非常感谢

【问题讨论】:

    标签: types integer typeerror racket typed-racket


    【解决方案1】:

    (我分享我找到的答案)

    由于index 被标记为Integer,它可以是正整数、空整数或负整数。因此,(expt 2 index) 可以返回一个有理数(例如,如果 index 为负数)。

    如果index 被标记为Nonnegative-Integer,则函数类型检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2011-05-01
      • 1970-01-01
      • 2015-06-08
      • 2010-11-20
      • 1970-01-01
      相关资源
      最近更新 更多