使用* /首先正确使用Typed Racket中的注释

时间:2017-01-11 21:36:37

标签: scheme racket typed-racket

我试图了解如何在Typed Racket中使用for*/first循环。因为每次我尝试执行我的代码时都会遇到异常,我需要添加更多注释。

我有以下for*/first循环:

(for*/first ([current-pos : Integer (in-range start-pos -1 -1)]
             #:when (char=? (string-ref input-string current-pos) character))
  current-pos)

如果我理解official typed racket reference权限,for*/first - 循环中的类型注释是完全可选的,但循环中使用的值必须都来自同一类型。

我现在检查了seq-expr in-range的类型,它是一个整数序列(Sequenceof Integer)current-pos注释为{{ 1}},所以每个值都是事实上的整数。在引用中还提到Integer必须是最后一个for子句(与我的代码片段完全相同)。

然而,每次执行代码时,我都会收到错误消息:

  

类型检查器:宏扩展错误 - 类型信息不足以进行类型检查。请添加更多类型注释:(对于* / first((current-pos:Integer(范围内起始位置-1 -1))#:when(char =?(string-ref input-string current-pos) character))current-pos)

所以我的问题:如何使用正确的注释在类型球拍中编写for * / first循环?

在stackoverflow上也有一个类似的问题,但解决方案只是在他们添加使用重载#:when而不是for*/first函数的可能性之前是最新的。但是,由于“你需要一个50点评论政策的声誉”,我不可能对这些问题发表评论。

我在REPL中进行了一些实验,问题必须在于for*/first: - 循环的返回值。我现在已将for*/first - 循环转换为for*/first循环并在结果上应用了for/list,这有点棘手,但至少它有效。

0 个答案:

没有答案