流氓:一个函数可以吗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
编辑
- 不要忘记
f
的 return
声明后的半决赛
这给出:
int (int) f() { return int (int y) { return y; } ; }
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
编辑
- 不要忘记
f
的return
声明后的半决赛
这给出:
int (int) f() { return int (int y) { return y; } ; }