Вот пример:
int two(int n) = 2 * n;
int(int) g() = two;
Функция two
умножается на 2 и g
возвращает функцию two
. Обратите внимание, что типом возврата g
является int(int)
, тип, описывающий функцию, которая возвращает 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
Вместо этого вы можете вернуть функцию которая по существу частично применяет эту функцию следующим образом:
int(int) multBy(int n) {
return int(int m) {
return mult(n,m);
};
}
int (int) (int)
Итак, это возвращает функцию, которая принимает int
и возвращает int (int)
, то есть функцию, которая принимает int
и возвращает int
. Затем вы можете использовать его следующим образом:
rascal>multBy3 = multBy(3);
int (int)
rascal>multBy3(4);
int: 12
В некоторых наших (многих) файлах с тестами вы можете найти больше примеров:
lang::rascal::tests::basic::Functions
lang::rascal::tests::functionality::FunctionComposition
Спасибо за ваш вопрос, у нас есть больше документации, чтобы сделать!