在函数式编程中,函数是否可以调用在其范围之外声明的另一个函数而不作为参数传递?

Mic*_*ael 7 functional-programming

使用在函数范围之外声明的函数是否违反了函数原则,如不变性?或者这是指数组,字符串等数据.

例如:

var data ["cat", "dog", "bird"];

function doThing (val) { 
     return val + ", go away!" 
}

function alterData (data) {
    return data.map(doThing);
}

alterData(data);
Run Code Online (Sandbox Code Playgroud)

以上代码是否可以接受?或者"doThing"函数是否需要作为参数传递给alterData函数?

我感到困惑的原因是因为在函数式编程示例中,我经常看到正在使用的语言的本机函数,而不是首先传递给函数.但是,这些示例从未足够复杂,无法显示如何使用函数库.

问候

Lui*_*las 3

在这方面,函数式编程与过程式编程没有什么不同\xe2\x80\x94你编写的定义可以在范围内的任何地方重用。您可以通过多种机制控制范围内的内容,例如使用模块定义、模块导出列表和模块导入。例如(在 Haskell 中):

\n\n
module My.Module\n  -- List of definitions exported from this module \n  ( doThing\n  , alterData\n  ) where\n\n-- Any definitions exported from `My.Other.Module` will be in scope \n-- in this one\nimport My.Other.Module\n\n-- Can\'t name this `data` because it\'s a reserved word in Haskell\nyourData :: [String]\nyourData = ["cat", "dog", "bird"]\n\ndoThing :: String -> String\ndoThing val = val ++ ", go away!" \n\nalterData :: [String] -> [String]\nalterData strings = map doThings strings\n
Run Code Online (Sandbox Code Playgroud)\n