大家好我想表达对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]))
答案 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]))