Вопрос

Я возился с функциональным программированием, когда наткнулся на необходимость этой функции, однако я не знаю, как такие вещи называются в стандартной номенклатуре.Кто-нибудь узнает это?

function WhatAmIDoing(args...)
   return function()
       return args
   end
end

Редактировать: Обобщив функцию, она принимает переменное количество аргументов (или, возможно, неявный список) и возвращает функцию, которая при вызове возвращает все аргументы, что-то вроде карри или маринада, но, похоже, это тоже не так.

Это было полезно?

Решение

WhatAmIDoing - это функция высшего порядка потому что это функция, которая возвращает другую функцию.

То, что он возвращает, - это думать — замыкание, созданное для отложенного вычисления фактического значения.Обычно преобразователи создаются для ленивого вычисления выражения (и, возможно, его запоминания), но в других случаях вместо простого значения просто необходима функция, как в случае с "constantly 5", который в некоторых языках возвращает функцию, которая всегда возвращает 5.

Последнее может применяться в приведенном примере, поскольку предполагается, что язык выполняет вычисления в аппликативном порядке (т.оценивает аргументы перед вызовом функции), функция не служит никакой другой цели, кроме как превратить значения в функцию, которая их возвращает.

WhatAmIDoing на самом деле является реализацией функции «постоянно», которую я описывал.Но в целом вам не обязательно возвращаться просто args во внутренней функции.Ты мог бы вернуться»ackermann(args)", что может занять много времени, например...

function WhatAmIDoing2(args...)
   return function()
       return ackermann(args)
   end
end

Но WhatAmIDoing2 вернется немедленно, потому что вычисление функции Аккермана будет приостановлено на некоторое время. закрытие.(Да, даже на языке вызова по значению.)

Другие советы

В функциональном программировании функция, которая принимает другую функцию в качестве аргумента или возвращает другую функцию, называется функция заказа .

Я бы сказал, что XXXX возвращает замыкание безымянной функции, связанной со значениями x, y и z.

Эта статья в Википедии может пролить свет

каррирование Речь идет о преобразовании функции в цепочку функций, каждая из которых принимает только один параметр и возвращает другую такую ​​же функцию.Итак, этот пример не имеет никакого отношения к каррированию.

Травление — это термин, обычно используемый для обозначения некоторого вида сериализации.Возможно, для хранения объекта, построенного из нескольких значений.

Если вас интересует то, что возвращаемая функция может получить доступ к аргументам функции XXXX, то я бы выбрал Remo.D.

Как уже говорили другие, это функция более высокого порядка . Как у вас есть "шаблон" в вашем вопросе я решил добавить, что эта функция функциональных языков часто моделируется с использованием шаблона стратегии в языках без функций высшего порядка.

Нечто похожее называется постоянно в Clojure:

/richhickey/clojure/blob/ab6fc90d56bfb3b969ed84058e1b3a4b30faa400/src/clj/clojure/core.clj#L1096

Только функция, которую постоянно возвращает, принимает произвольное количество аргументов, что делает ее более общей (и гибкой), чем ваш шаблон.

Я не знаю, имеет ли этот шаблон имя, но использовал бы его в тех случаях, когда обычно ожидаются функции, но все, что меня волнует, - это возвращение определенного значения:

(map (constantly 9) [1 2 3])
=> (9 9 9) 

Просто интересно, для чего ты это используешь?

Делегат?

В основном вы возвращаете функцию ?? или вывод функции?

Не понял, извините ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top