我最近开始学习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]
Run Code Online (Sandbox Code Playgroud)
我现在想做以下事情:
let resultList = List.map(fun elem -> elem 3) functions
Run Code Online (Sandbox Code Playgroud)
其中结果值为列表[3; 9; 27].然而,这不是发生的事情.相反,我得到:
val resultList : (int -> int) list = [<fun:Invoke@3000>; <fun:Invoke@3000>; <fun:Invoke@3000>]
Run Code Online (Sandbox Code Playgroud)
我想我不完全相信使用地图是正确的前进方向,所以我的问题是:
<fun:Invoke>意思?非常感谢您的帮助.
丹尼尔
您的函数定义不正确,它们会使用额外的(未使用的)参数,因此只是部分应用而不是按照您的预期进行评估.除此之外,你的想法是正确的;
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]
Run Code Online (Sandbox Code Playgroud)
虽然我不是F#专家,但<fun:Invoke>在这种情况下,似乎表明该值是(部分应用的)函数.