F#循环遍历函数列表,将每个函数依次应用于一个数字
我最近开始学法语。我试图循环遍历函数列表,将每个函数应用于一个值。例如,我有:F#循环遍历函数列表,将每个函数依次应用于一个数字,f#,F#,我最近开始学法语。我试图循环遍历函数列表,将每个函数应用于一个值。例如,我有: let identity x = fun x -> x let square x = fun x -> x * x let cube x = fun x -> x * x * x let functions = [identity; square; cube] 现在,我想做如下工作: let resultList = List.map(fun elem -> elem 3) functio
let identity x = fun x -> x
let square x = fun x -> x * x
let cube x = fun x -> x * x * x
let functions = [identity; square; cube]
现在,我想做如下工作:
let resultList = List.map(fun elem -> elem 3) functions
其中,结果值将是列表[3;9;27]。然而,事实并非如此。相反,我得到:
val resultList : (int -> int) list = [<fun:Invoke@3000>; <fun:Invoke@3000>; <fun:Invoke@3000>]
val结果列表:(int->int)列表=[;;]
我想我并不完全相信使用map是正确的前进方向,所以我的问题是:
是什么意思Daniel您的函数定义不太正确,它们使用了一个额外的(未使用的)参数,因此只是部分应用,没有按照预期进行计算。除此之外,你的想法是正确的
let identity2 = fun x -> x
let square2 = fun x -> x * x
let cube2 = fun x -> x * x * x
let functions = [identity2; square2; cube2]
let resultList = List.map(fun elem -> elem 3) functions;;
> val resultList : int list = [3; 9; 27]
虽然我不是F#专家,但在这种情况下,
似乎表明该值是一个(部分应用的)函数。因为我喜欢尽可能简化,你可以通过从函数中去掉乐趣来减少Joachim的答案:
let identity x = x
let square x = x * x
let cube x = x * x * x
let functions = [identity; square; cube]
printfn "%A" (List.map(fun elem -> elem 3) functions)
给出输出[3;9;27]
对我来说,这更自然。我不明白为什么函数本身需要包装函数,而不仅仅是函数。谢谢。这很有道理!我想我混淆了定义函数的两种不同方式。让平方x=x*x也起作用。干杯,丹尼尔