Ruby должен соответствовать следующим требованиям, чтобы быть «НАСТОЯЩИМ».
Неизменяемые значения: после установки «переменной» ее нельзя изменить. В Ruby это означает, что вам нужно обрабатывать переменные как константы. Язык не поддерживается полностью, вам придется заморозить каждую переменную вручную.
Нет побочных эффектов: при передаче заданного значения функция всегда должна возвращать один и тот же результат. Это идет рука об руку с наличием неизменных значений; функция никогда не может принимать значение и изменять его, так как это может вызвать побочный эффект, который является косвенным для возврата результата.
Функции высшего порядка: это функции, которые допускают функции в качестве аргументов или используют функции в качестве возвращаемого значения. Это, пожалуй, одна из самых важных особенностей любого функционального языка.
Curry: , включаемая функциями более высокого порядка, curry превращает функцию, которая принимает несколько аргументов, в функцию, которая принимает один аргумент. Это идет рука об руку с частичным применением функции, которая преобразует функцию с несколькими аргументами в функцию, которая принимает меньше аргументов, чем первоначально.
Рекурсия: зацикливание, вызывая функцию изнутри себя. Когда у вас нет доступа к изменяемым данным, рекурсия используется для построения и создания цепочки данных. Это связано с тем, что зацикливание не является функциональной концепцией, так как требует передачи переменных для сохранения состояния цикла в данный момент времени.
Ленивая оценка или отложенная оценка: задержка обработки значений до момента, когда это действительно необходимо. Если, например, у вас есть код, который сгенерировал список чисел Фибоначчи с включенным отложенным вычислением, он фактически не будет обрабатываться и вычисляться до тех пор, пока одно из значений в результате не будет требоваться другой функцией, такой как put.
Предложение (Просто мысль)
Было бы здорово иметь какое-то определение, чтобы иметь директиву mode
для объявления файлов с функциональной парадигмой, например
режим «функциональный»