流氓:一个函数可以吗return一个函数

Rascal: Can a Function return a Function

Rascal 文档有一个 example of a function 将函数作为参数:

int f(int x, int (int) multi){ return multi(x); }

相反,returns函数的语法是什么?

我找不到示例并尝试了以下方法:

(int (int)) f() {return (int y) {return y;}}

但是 repl 中有语法错误。

这是一个例子:

int two(int n) = 2 * n;
int(int) g() = two;

函数 two 乘以 2 和 g return 函数 two。 观察 g 的 return 类型是 int(int),一种描述函数的类型,该函数 return 是一个 int 并且有一个 int 参数。

可以通过内联定义实现类似的效果:

int(int) g() = int(int n) { return 2 * n; };

您也可以在其他函数中使用相同的符号。例如,您可以创建一个将两个数字相乘的函数:

int mult(int n, int m) = n * m;

如果你使用它,你会得到你所期望的:

rascal>mult(3,4);
int: 12

您可以改为 return 基本上部分应用此函数的函数,如下所示:

int(int) multBy(int n) { 
    return int(int m) { 
        return mult(n,m); 
    }; 
}
int (int) (int)

所以,这个 return 是一个接受 int 和 return 一个 int (int) 的函数,即一个接受 int 和return 一个 int。然后你可以这样使用它:

rascal>multBy3 = multBy(3);
int (int)

rascal>multBy3(4);
int: 12

您可以在我们的一些(许多)文件中找到更多带有测试的示例:

  • lang::rascal::tests::basic::Functions
  • lang::rascal::tests::functionality::FunctionComposition

感谢您的提问,我们还有更多文档要做!

对我失败的尝试的简短回答是:

  • f
  • 的 return 类型中省略最外层的括号
  • 添加匿名函数的 return 类型 int return 由 f
  • 编辑
  • 不要忘记 freturn 声明后的半决赛

这给出:

int (int) f() { return int (int y) { return y; } ; }