Scheme 类型化球拍中变量函数的类型是什么?

Scheme 类型化球拍中变量函数的类型是什么?,scheme,racket,variadic-functions,typed-racket,Scheme,Racket,Variadic Functions,Typed Racket,我正在尝试将使用ffi/vector中的f32vector的Racket程序转换为类型化Racket程序,这需要通过require/Typed为f32vector提供注释。然而,F32矢量是可变的;它可以接受数量可变的参数,因此以下两项都是可以接受的: (f32vector 1.0 3.0 4.0 7.0) (f32vector 2.0 2.1) 如何编写此函数的类型批注?假设您已经为F32Vector创建了一个不透明类型,那么您可以这样编写类型: (require/typed ffi/vec

我正在尝试将使用ffi/vector中的f32vector的Racket程序转换为类型化Racket程序,这需要通过require/Typed为f32vector提供注释。然而,F32矢量是可变的;它可以接受数量可变的参数,因此以下两项都是可以接受的:

(f32vector 1.0 3.0 4.0 7.0)
(f32vector 2.0 2.1)

如何编写此函数的类型批注?

假设您已经为
F32Vector
创建了一个不透明类型,那么您可以这样编写类型:

(require/typed ffi/vector
               [f32vector (Real * -> F32Vector)])
(require/typed ffi/vector
               [#:opaque F32Vector f32vector?])
如果您还没有不透明类型,可以按如下方式导入:

(require/typed ffi/vector
               [f32vector (Real * -> F32Vector)])
(require/typed ffi/vector
               [#:opaque F32Vector f32vector?])
当然,您可以将上述子句合并为一个
require/typed



旁注:在将来,类型化Racket可能还支持一个
->*
类型构造函数,该构造函数与用于编写契约的符号(包括rest参数)相匹配。另外,希望我们可以提供一个
类型化/ffi/vector
以及其他捆绑库。

您可能希望使用
浮点
或者甚至
单浮点
而不是
实数
。谢谢,这正是我想要的。有时间把它添加到输入的Racket文档中可能会很有用,或者更容易找到它是否已经存在。没问题。《打字球拍指南》在第4.8.1节中确实解释了这种语法,但可能不够清楚或不容易找到。如果您对如何改进它有任何建议,请随时提交更改请求,写信给邮件列表,或在IRC上ping我们中的一个。@Asumutakakawa,哎呀,我在阅读指南的那一部分时错过了它。出于某种原因,我试图使用。。。用符号代替*。我的错;指南本身非常清楚。@Asumutakakawa刚刚添加了对这些向量的支持。您可以在此处获取新版本的Racket: