2

假设我有一个名为 的过程foo,它返回 a::float意味着采用以下参数:

  1. 一个带有两个::float参数的过程。
  2. 一个::float
  3. 其他::float

我将如何在代码部分中export为该函数编写一个?module到目前为止我有这个:

(module bar
    (export (foo::float 'something ::float ::float)))

这里应该'something换什么?

4

2 回答 2

2

这个问题类似于之前的 bigloo 问题。目前没有优雅的方法可以做到这一点。您应该使用 ::procedure 作为第一个参数的类型。这并没有太大的损失,因为在许多情况下,bigloo 的类型推断和流分析会发现您试图通过类型注释捕获的错误。

于 2015-06-08T06:38:19.120 回答
0

我的猜测是没有实际测试。

定义一个类型,比如说,fun-of-two-floats使用type.

文档中的示例是:

(module foo 
   (extern
    (type *string->double
          (function double (string)) 
                    "double (*)(char *)")
    (macro cv::*string->double "convert")))

(print (*string->double-call cv "3.14"))

所以我的猜测是这会起作用:

(type fun-of-two-floats
      (function float (float float)))

(module bar
    (export (foo::float fun-of-two-floats ::float ::float)))

文档在这里:http ://www-sop.inria.fr/mimosa/fp/Bigloo/doc/bigloo-28.html#Defining-an-extern-type

于 2015-06-06T12:42:14.387 回答