F#中的高阶函数

时间:2018-02-02 00:36:58

标签: lambda f# functional-programming

大家好我想表达对test1的函数调用,而不首先定义更高的函数

let higher = fun a b -> a>b
let rec test1 test2 number list=

        match (number,list) with
        |number,[]                           -> []
        |number,x1::xs when test2 a x = true -> x1::test1 test2 number xs 
        |number,x1::xs                       -> test1 test2 number xs 

printfn "%A" (test1 (higher 5 [5;2;7;8]))

2 个答案:

答案 0 :(得分:5)

这是设计的。函数中定义的值和函数只能在该函数中访问,从外部看不到它们。

这允许我们定义辅助函数和中间值,而不会污染全局命名空间。

要使函数higher可以在函数test1之外访问,您需要在test1之前或之后定义它,但不能在其中定义它。 test1中定义的任何内容只能在test1内访问。

答案 1 :(得分:4)

如果您不想定义higher但是将函数传递给执行相同操作的test1,只需传递一个函数文字:

printfn "%A" (test1 ((fun a b -> a > b) 5 [5;2;7;8]))

或者,因为在这种情况下,你只是直接比较两个操作数,甚至更短:

printfn "%A" (test1 ((>) 5 [5;2;7;8]))