我需要在打字/球拍中做矢量叉积。以下代码在#lang racket
没有类型注释的情况下可以正常工作。参考
#lang typed/racket
(: cross-product (-> VectorTop VectorTop VectorTop))
(define (cross-product X Y)
(: len Integer)
(define len (vector-length X))
(for/vector ([n len])
(: ref (-> VectorTop Integer Any))
(define (ref V i) (vector-ref V (modulo (+ n i) len)))
(- (* (ref X 1) (ref Y 2)) (* (ref X 2) (ref Y 1)))))
(define X '#(0 1 0))
(define Y '#(0 0 -1))
(cross-product X Y)
当我使用类型注释运行代码时,会发生类型不匹配错误。
- 类型检查器:
预期类型不匹配:
给出的数字:任何在:(参考 X 1)- 类型检查器:
预期类型不匹配:
给出的数字:任何在:(参考 Y 2)- 类型检查器:
预期类型不匹配:
给出的数字:任何在:(参考 X 2)- 类型检查器:
预期类型不匹配:
给出的数字:任何在:(参考 Y 1)- 类型检查器:摘要:在:(
参考 X 1)
(参考 Y 2)
(参考 X 2)
(参考 Y 1)中遇到 4 个错误
看起来(for/vector ([n len])
触发了错误,我尝试将类型注释如(for/vector ([{n: Integer} len])
,但最终出现错误:未绑定标识符模块 in n. 我需要纠正什么?有没有更好的方法来做矢量叉积?